2015-11-05 2 views
0

Я создал контроллер Web API, который имеет действие регистра:Перенаправление от действия APIController к другой MVC контроллер действий

public class MyProjApiController : ApiController 
    { 
     public IHttpActionResult Register() 
     { 
      return RedirectToAction("Register", "AccountController"); //?? 
     } 
    } 

И я пытаюсь перенаправить на другое действие в MVC контроллер public class AccountController : Controller, который имеет public async Task<ActionResult> Register(RegVM model) но мой Зарегестрироваться действие в MyProjApiController имеет IHttpActionResult тип возврата и зарегистрируйтесь в AccountController имеет Task<ActionResult> тип - как его называть?

+0

http://stackoverflow.com/questions/11324711/redirect-from-asp-net-web-api-post-action –

ответ

4

Думаю, вы смешиваете здесь две концепции. Ваш контроллер API должен иметь конечные точки, которые будут вызываться от какого-либо клиента, и вы должны возвращать некоторые данные обратно в формате, который клиент может читать, XML или JSON. Вы не должны делать перенаправление на другой контроллер MVC.

Что вы должны делать, это вернуть некоторые данные, которые имеют путь к контроллеру действий MVC, который клиент может использовать.

public HttpResponseMessage Register() 
{ 
    //DO something as you want 
    var newUrl = this.Url.Link("Default", new { Controller = "Account", 
                    Action = "Register" }); 
    return Request.CreateResponse(HttpStatusCode.OK, 
               new {Success = true, RedirectUrl = newUrl}); 
} 

Это вернет вам ответ, как это вызывающий с кодом состояния 200 OK ответа

{ 
    "Success" : true, 
    "RedirectUrl" : "yoursite.com/Account/Register"  
} 

Клиент должен прочитать это и сделать необходимые вещи. Например, если вы вызываете этот API из своего js-кода, вы можете просто использовать window.location.href для перенаправления пользователя на новую страницу.

Например,

$.post("PathToYourApiEndpoint,function(res){ 
    if(res.Success) 
    { 
    window.location.href=res.RedirectUrl; 
    } 
}); 

Опять же, я не знаю, почему вы первый вызов API и перенаправляет пользователя к действию контроллера MVC. Независимо от того, какую логику вы используете в методе действий веб-api, вы можете сделать это в своем MVC-контроллере и, таким образом, избегать вызова API.

+0

так что что-то приходит в сообщение (RegisterModelClass как JSON), я проверяю его и отправляю обратно клиент другому JSON с URL-адресом перенаправления - правильно? – curiousity

+0

Зависит от того, от кого вы его вызываете. Если вы вызываете конечную точку Web api, чтобы что-то проверить, прежде чем позволить пользователю перейти на страницу регистрации, вы можете называть эту конечную точку из вашего js-кода. Получите ответ, проверьте значение и перенаправьте пользователя на новую страницу с помощью 'window.location.href'. – Shyju

+0

Я попытаюсь позвонить ему через Android-устройство – curiousity

Смежные вопросы