直接向客户端抛出HTTPResponseException

时间:2017-06-29 19:12:55

标签: asp.net-mvc-4 asp.net-web-api

我在MVC(Asp.net 4.5.2)中的ApiController下实现了api。在那个api中,我想使用HttpResponseMessage(HttpStatusCode.Unauthorized)抛出HttpResponseException并指定ReasonPhrase。如何将这个直接发送到客户端而不是让asp / mvc尝试将它们重定向到登录页面?

2 个答案:

答案 0 :(得分:1)

var message = new HttpResponseMessage(HttpStatusCode.Unauthorized);
message.ReasonPhrase = "Hello";
throw new HttpResponseException(message);

但重定向取决于Web.config设置。我认为你在web.config中有认证部分,可以这样思考:

  <system.web>
  <authentication mode="Forms">
    <forms loginUrl="/Login/Index"></forms>
  </authentication>
  </system.web>

如果删除此部分,则重定向不会发生。但在这种情况下,您应该自己实现身份验证。

答案 1 :(得分:0)

Asp.Net表单身份验证模块将401转换为302

如果您使用UseCookieAuthentication,请通过更改OnApplyRedirect来抑制此问题

文件Startup.Auth.cs - &gt; 在app.UseCookieAuthentication中的ConfigureAuth方法 - &gt; (新CookieAuthenticationOptions {Provider = new CookieAuthenticationProvider { - - &gt; 添加OnApplyRedirect

        app.UseCookieAuthentication(new CookieAuthenticationOptions
        {
            Provider = new CookieAuthenticationProvider
            {
                OnApplyRedirect = context =>
                {
                    if (!context.Request.Uri.LocalPath.StartsWith(VirtualPathUtility.ToAbsolute("~/api")))
                    {
                        context.Response.Redirect(context.RedirectUri);
                    }
                }
            }
        });