从 asp.net web api 发布操作重定向

Posted

技术标签:

【中文标题】从 asp.net web api 发布操作重定向【英文标题】:Redirect from asp.net web api post action 【发布时间】:2012-07-04 16:47:14 【问题描述】:

我对 ASP.NET 4.0 Web API 非常陌生。我们可以在 POST 操作结束时重定向到另一个 URL 吗?例如... Response.Redirect(url)

实际上,我通过 Web API(例如 www.abcwebapi.com/upload)从 MVC 应用程序(例如 www.abcmvc.com)上传文件

这里的upload 是POST 操作。我将多部分表单发布到 Web API 上传控制器的发布操作。上传后我想重定向回www.abcmvc.com

这可能吗?

【问题讨论】:

【参考方案1】:

当然:

public HttpResponseMessage Post()

    // ... do the job

    // now redirect
    var response = Request.CreateResponse(HttpStatusCode.Moved);
    response.Headers.Location = new Uri("http://www.abcmvc.com");
    return response;

【讨论】:

使用此重定向技术解决了我使用其他重定向技术获得的“对象移动到”WebAPI 页面。同样对于临时重定向而不是永久重定向,您可以使用 HttpStatusCode.Redirect (302) 或 .RedirectMethod (303) @Darin Dimitrov,这行得通。为什么当我改用 HttpStatusCode.Redirect 时,我的客户端会收到 401 响应?【参考方案2】:

这是另一种无需对 url 进行硬编码即可到达网站根目录的方法:

var response = Request.CreateResponse(HttpStatusCode.Moved);
string fullyQualifiedUrl = Request.RequestUri.GetLeftPart(UriPartial.Authority);
response.Headers.Location = new Uri(fullyQualifiedUrl);

注意: 仅当您的 MVC 网站和 WebApi 在同一个 URL 上时才有效

【讨论】:

【参考方案3】:
    [HttpGet]
    public RedirectResult Get()
    
        return RedirectPermanent("https://www.google.com");
    

【讨论】:

【参考方案4】:

你可以检查一下

[Route("Report/MyReport")]
public IHttpActionResult GetReport()


   string url = "https://localhost:44305/Templates/ReportPage.html";

   System.Uri uri = new System.Uri(url);

   return Redirect(uri);

【讨论】:

@dotnetguy 请停止建议相同的编辑。如果需要,请将您更改的代码发布在单独的答案中。继续编辑没有意义,审稿人会拒绝每次编辑。

以上是关于从 asp.net web api 发布操作重定向的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET Web APP 和 Web API 无限重定向循环中的 Azure AD Open ID Connect OAuth 2.0

ASP.NET Web API 2 Bearer Token 重定向到登录页面而不是返回 401

ASP.NET Core Web API + Angular 对预检请求的响应未通过访问控制检查:预检请求不允许重定向

ASP.NET Web API更改请求URI(重定向到另一个方法)

ASP.NET Mvc Api:设置 cookie 然后 302/303 重定向丢失 cookie

如何重定向到 ASP.NET MVC 中的上一个操作?