在同一站点上为Asp.Net MVC和Web API提供不同的身份验证模式?

时间:2014-10-28 19:43:04

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

我有一个ASP.Net MVC4内部网站点,它也有一个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));
    }
}

2 个答案:

答案 0 :(得分:0)

当然,在您的WebApiConfig类中,您需要仅禁用web api的默认主机身份验证,您可以按照以下代码执行此操作:

public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
        // Web API routes
        config.MapHttpAttributeRoutes();
        config.SuppressDefaultHostAuthentication();
    }
}

答案 1 :(得分:0)

在我的项目中,我使用下面的代码实现了它。该项目使用用于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));

    }
}