Использовать RedirectToAction в веб-интерфейсе API
Я использую RedirectToAction в своем приложении ASP.Net WebAPI, и я попробовал следующее.
return RedirectToAction("AuthenticateUser", "AuthenticationServiceWebApi", new RouteValueDictionary
{
{"userName", model.UserName},
{"password", model.Password}
});
Это генерирует перенаправление, как показано ниже.
127.0.0.1:81/authenticationservicewebapi/authenticateuser/admin/[email protected]
Но, поскольку я использую WebAPI, мне нужно быть URL-адресом, как показано ниже.
127.0.0.1:81/api/authenticationservicewebapi/authenticateuser/admin/[email protected]
Как это сделать?
Ответы
Ответ 1
Я не уверен, как выглядит ваша маршрутизация, подпись API веб-интерфейса, поэтому я попытаюсь угадать.
Несколько вещей на самом деле не складываются здесь (почему вы должны передавать пароль в URL-адресе?)
но...
Учитывая вашу структуру URL, я бы предположил, что ваша маршрутизация - это что-то вроде:
routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{action}/{id}/{id2}",
defaults: new { id = RouteParameter.Optional, id2 = RouteParameter.Optional }
);
Затем, учитывая, что, я думаю, ваш аутентичный пользователь должен быть чем-то вроде:
public HttpResponseMessage AuthenticateUser([FromUri]string id, [FromUri]string id2)
Если это так, то для перенаправления на это с контроллера MVC вам нужно:
return Redirect(
Url.RouteUrl("DefaultApi",
new { httproute = "",
controller = "AuthenticationServiceWebApi",
action = "AuthenticateUser",
id = model.UserName,
id2 = model.Password
}));
Ответ 2
Если пользователь не аутентифицирован, вы не должны перенаправлять. Обычно на другом конце нет интерактивного пользователя, поэтому вы должны действительно возвращать код состояния 401 HTTP вместо перенаправления.
В ASP.NET Web API нет эквивалента.
Если вы настаиваете на, то вот оно:
Вы бросаете HttpResponseException
:
var httpResponseMessage = new HttpResponseMessage(HttpStatusCode.Found);
httpResponseMessage.Headers.Location = new Uri(myAddress, UriKind.Relative);
throw new HttpResponseException(httpResponseMessage);
Ответ 3
Я также придумал простое решение. Не очень хорошо, как выше, но стоит поделиться.
string post_data = "userName=th&[email protected]";
string uri = "http://127.0.0.1:81/api/authenticationservicewebapi/authenticateuser";
// create a request
HttpWebRequest request = (HttpWebRequest)
WebRequest.Create(uri);
request.KeepAlive = false;
request.ProtocolVersion = HttpVersion.Version10;
request.Method = "POST";
// turn our request string into a byte stream
byte[] postBytes = Encoding.ASCII.GetBytes(post_data);
// this is important - make sure you specify type this way
request.ContentType = "application/x-www-form-urlencoded";
request.ContentLength = postBytes.Length;
Stream requestStream = request.GetRequestStream();
// now send it
requestStream.Write(postBytes, 0, postBytes.Length);
requestStream.Close();
Спасибо всем.