ASP.Net MVC IdentityServer3破坏了我的webapi路由

时间:2015-08-05 13:24:59

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

所以我目前正在为我正在开发的项目实现安全性,我按照identityServer3的指南将它添加到我的mvc5应用程序中。我完成了整个设置,并认为一切都很好,直到我意识到我的api中的路由,除非它们是非常基本的,/ api /.../不再有效。

     config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );

我正在使用默认路由,并且在我的api控制器的各个部分上,我已经放置了路由属性,以便在它们超出此格式的情况下引导它们。例如:

    [Route("api/Location/GetByAreaIncludeFileStore/{id}")]
    public IEnumerable<Location> GetLocationsByAreaIdIncludeFileStore(int id)
    {
        if (id <= 0)
        {
            return null;
        }
        IEnumerable<Location> locations = _lookupService.GetLocationsByAreaIdIncludesFileStore(id);
        return locations;
    }

正如我之前所说,在添加身份服务器之前,论文的工作非常精彩。在添加IdentityServer期间,我不得不在我的webapi中添加一些nuget包:

    install-package Microsoft.Owin.Host.SystemWeb
    install-package Microsoft.Aspnet.WebApi.Owin
    install-package Thinktecture.IdentityServer3.AccessTokenValidation

所以基本上我的问题毕竟是说,我如何修复我的路线,以便获得我需要的所有信息?

目前我的路线是

    api/controller
    api/controller/id
    api/controller/action
    api/controller/action/id

任何帮助都会很棒,谢谢! 此外,我查看了许多其他帖子,并在提出此问题之前尝试了很多路由和属性的变体。

2 个答案:

答案 0 :(得分:1)

config.MapHttpAttributeRoutes();之前在您的WebApiConfig config.Routes.MapHttpRoute()中添加此行。

答案 1 :(得分:0)

我实际上能够使用此帖子中解决方案中描述的方法使其工作:MVC 4.5 Web API Routing not working? 我昨天尝试过这样做,但这看起来并不正确,但随着更多的吐痰和抛光,我最终得到了正确的路线。他们建议如下配置路由配置:

config.Routes.MapHttpRoute(
    name : "DefaultAPi",
    routeTemplate : "api/{controller}/{id}/{action}",
    defaults: new {id= RouteParameter.Optional, 
    action = "DefaultAction"
);

然后按照该模式更改所有基本路线,如:

[ActionName("DefaultAction")
public string Get()
{
}

[ActionName("SpaceTypes")]
public string GetSpaceTypes(int id)
{
}

它有效,我不得不重构我所有的api电话和我的宁静服务以配合,但尽管如此,我又恢复了运作。