2017-06-29 87 views
0

我有一個API實現在一個MVC(Asp.net 4.5.2)的ApiController下。在那個api中,我想用HttpResponseMessage(HttpStatusCode.Unauthorized)拋出一個HttpResponseException並指定一個ReasonPhrase。如何直接發送給客戶端,而不是讓asp/mvc嘗試將它們重定向到登錄頁面?直接向客戶端拋出HTTPResponseException

回答

0

Asp.Net窗體身份驗證模塊轉換如果使用UseCookieAuthentication 401至302

,然後通過改變OnApplyRedirect抑制這種

文件Startup.Auth.cs - > ConfigureAuth方法- >內部app.UseCookieAuthentication(新CookieAuthenticationOptions {提供商=新CookieAuthenticationProvider {- >添加OnApplyRedirect

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

我不認爲我完全理解你的指示。我已經將這個片段添加到了ConfigureAuth(app)之下的Startup.Configuration(IAppBuilder應用程序);但是我仍然被重定向到登錄。 – Roger

+0

不在startup.configuration下面。請去文件startup.auth.cs。搜索線app.UseCookieAuthentication。在UseCookieAuthentication裏面,當你設置提供者時,複製粘貼這段代碼(重寫OnApplyRedirect) – Kaushal

+0

啊,是的。謝謝,這正是我所需要的。 API現在可以使用auth或api錯誤返回詳細的解釋,並且應用程序的其餘部分的身份驗證不變。 – Roger

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

但重定向取決於Web.config設置。我覺得你有一個像這樣在web.config中somethink鑑定部分:

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

如果刪除這部分,重定向不會發生。但在這種情況下,您應該自行實施身份驗證。

+0

是的,那正是我正在做的。但不是客戶端收到錯誤消息,他們會跳到一個登錄頁面。我希望客戶端調用API來獲取錯誤。 – Roger

+0

重定向發生在服務器端還是客戶端? –

+0

據我所知,mvc看到未經授權的狀態碼並將請求路由到登錄頁面。我只是想讓它返回一個錯誤。 – Roger

相關問題