2012-10-22 69 views
4

我在啓用了MVC4 Forms身份驗證的網站中運行web-api webservice。 Forms身份驗證應用程序使用web-api webservices。 我使用[Authorize]屬性保護了web-api。 現在,當我從MVC4應用程序調用Web-API時,授權憑證已過期我收到一個醜陋的瀏覽器類型的登錄對話框(它不適用於表單身份驗證)。 我沒有得到這在我的開發機器(IIS7.5),我不明白! 如何防止此對話框出現?我只需要接收401防止401上的瀏覽器驗證對話框

+0

的可能重複[並排基本和表單的身份驗證的ASP.NET Web API(.NET 4)](HTTP:/ /stackoverflow.com/questions/13004091/side-by-side-basic-and-forms-authentication-with-asp-net-web-api-net-4) – tugberk

+0

看着那個帖子和其他許多人,但沒有找到任何解決方案或解釋爲什麼它在我的開發機器上,而不是在IIS6服務器上。 –

+0

您是否使用了正確版本的AuthorizeAttribute?您應該使用Web API的System.Web.Http.AuthorizeAttribute,而不是System.Web.Mvc.AuthorizeAttribute。他們有非常不同的行爲。 –

回答

0

移動網站的IIS8服務器和現在的問題已經...

0

約翰·加洛韋在他的截屏在ASP.NET Web API - Authorization很好地解釋這種(一個高度推薦的手錶

對於一些API控制器像一個下面,你已經使用了Authorize屬性上它。

[Authorize] 
public class CommentsController : ApiController 
{ 
... 
} 

他說,如果一個客戶端,使未經授權的請求,AuthorizationFilter確實是有道理的一個HTTP API的唯一的東西 - 它返回一個HTTP狀態代碼401,需要授權。再一次,我們回到了將HTTP用於API的價值 - 我們不需要安排任何事情,任何平臺上的任何客戶端都會知道HTTP 401響應的含義。

由客戶決定當他們得到401時應該怎麼做。在這個基於JavaScript /瀏覽器的示例中,我們將重定向到客戶端上的登錄頁面。

$(function() { 
$("#getCommentsFormsAuth").click(function() { 
    viewModel.comments([]); 
    $.ajax({ url: "/api/comments", 
     accepts: "application/json", 
     cache: false, 
     statusCode: { 
      200: function(data) { 
       viewModel.comments(data); 
      }, 
      401: function(jqXHR, textStatus, errorThrown) { 
       self.location = '/Account/Login/'; 
      } 
     } 
    }); 
}); 
}); 

這裏在這個例子中,如果遇到401,那麼你可以決定要做什麼。

希望這會有所幫助。

+0

這已經是我正在做的,但它仍然給我的瀏覽器彈出。這裏是我的代碼: http://pastebin.com/BufLzdHD –

+0

你可以改變'self.location ='/ Account/Login /'',而是在這裏插入你想要的行爲 – Yasser