2014-10-28 28 views
1

我有一個ASP.Net MVC4內部網站,也有一個Web API控制器。Asp.Net MVC和Web API在同一站點上的不同身份驗證模式?

我在web.config中設置了Authentication =「Windows」。

是否可以將Web API設置爲僅允許匿名?

**我根據以下建議對WebApiConfig文件所做的更改。

public static class WebApiConfig 
{ 
    public static void Register(HttpConfiguration config) 
    { 
     config.Routes.MapHttpRoute(
      name: "DefaultApi", 
      routeTemplate: "api/{controller}/{id}", 
      defaults: new { id = RouteParameter.Optional } 
     );  
    // Web API routes 
     config.MapHttpAttributeRoutes(); 
     config.SuppressDefaultHostAuthentication(); 
     config.Filters.Add(new HostAuthenticationFilter(OAuthDefaults.AuthenticationType)); 
    } 
} 
+0

Web API控制器上的AllowAnonymous屬性? http://stackoverflow.com/questions/20835373/allow-anonymous-to-asp-net-web-api-controller-while-rest-of-the-application-runs – 2014-10-28 19:47:52

回答

0

當然,你的WebApiConfig類中,你只需要抑制爲Web API默認主機的認證,你可以做如下的代碼:

+0

這是一個僅適用於Web API 2.2的功能嗎? – 2014-10-29 18:56:12

+0

是的,它是Web API 2功能不是1.我相信你使用的是Web API 1,沒有注意到你的項目是MVC4。 :( – 2014-10-29 20:58:14

+0

我已升級項目,以便我可以使用API​​ 2. – 2014-10-30 18:12:48

0

在項目中,我achived它與下面的代碼。該項目使用MVC的表單身份驗證和WebAPI的基本身份驗證。我使用Thinktecture庫來實現它。

public static class WebApiConfig 
{ 
    public static void Register(HttpConfiguration config) 
    { 
     config.Routes.MapHttpRoute(
      name: "DefaultApi", 
      routeTemplate: "api/{controller}/{id}", 
      defaults: new { id = RouteParameter.Optional } 
     ); 

     var authConfig = new AuthenticationConfiguration(); 
     authConfig.AddBasicAuthentication((userName, password) => AuthenticationService.ValidateUser(userName, password)); 
     config.MessageHandlers.Add(new AuthenticationHandler(authConfig)); 

    } 
}