Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从APIController操作重定向到其他MVC控制器操作_C#_Asp.net Mvc - Fatal编程技术网

C# 从APIController操作重定向到其他MVC控制器操作

C# 从APIController操作重定向到其他MVC控制器操作,c#,asp.net-mvc,C#,Asp.net Mvc,我创建了一个具有注册操作的web api控制器: public class MyProjApiController : ApiController { public IHttpActionResult Register() { return RedirectToAction("Register", "AccountController"); //?? } } 我正试图重定向到MVC Controllerp

我创建了一个具有注册操作的web api控制器:

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

我正试图重定向到MVC Controller
public类AccountController:Controller
中的另一个操作,该操作具有
公共异步任务寄存器(RegVM模型)
但是我在
MyProjApiController
中的注册操作具有
IHttpActionResult
返回类型,而在AccountController中注册具有
任务
类型-如何调用它?

我认为您在这里混合了两个概念。您的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"    
}
客户应该阅读此内容并做必要的事情。例如,如果从js代码调用此API,只需使用window.location.href将用户重定向到新页面

比如说,

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

同样,我不知道为什么要首先调用API,并将用户重定向到MVC控制器操作。无论您在Web api操作方法中执行何种逻辑,您都可以在MVC控制器中执行,从而避免api调用。

我认为您在这里混合了两个概念。您的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"    
}
客户应该阅读此内容并做必要的事情。例如,如果从js代码调用此API,只需使用window.location.href将用户重定向到新页面

比如说,

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

同样,我不知道为什么要首先调用API,并将用户重定向到MVC控制器操作。无论您在Web api操作方法中执行何种逻辑,您都可以在MVC控制器中执行,从而避免api调用。

如果您是指api帮助文件。我想禁用本地以外的功能

if (!Request.IsLocal)
{
  Response.Redirect("/home");
}

如果您的意思是从API帮助文件。我想禁用本地以外的功能

if (!Request.IsLocal)
{
  Response.Redirect("/home");
}

所以,post中出现了一些东西(RegisterModelClass作为JSON),我对其进行验证,并将另一个带有重定向URL的JSON发送回客户端-correct?取决于您从何处调用它。如果您在让用户进入注册页面之前调用WebAPI端点来验证某些内容,则可能是从js代码中调用此端点。因此,获取响应,检查值并使用
window.location.href
将用户重定向到新页面。我将尝试通过android调用它device@curiousity那你为什么要重定向到MVC控制器呢。您的寄存器应该是一个API端点,所以,post中会出现一些东西(RegisterModelClass作为JSON),我会验证它,并将另一个带有重定向URL的JSON发送回客户端-正确?取决于您从何处调用它。如果您在让用户进入注册页面之前调用WebAPI端点来验证某些内容,则可能是从js代码中调用此端点。因此,获取响应,检查值并使用
window.location.href
将用户重定向到新页面。我将尝试通过android调用它device@curiousity那你为什么要重定向到MVC控制器呢。您的寄存器应该是API端点