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

本文关键字:我的 webapi 路由 坏了 Net MVC IdentityServer3 ASP | 更新日期: 2023-09-27 18:06:25

所以我目前正在一个项目上实现安全性,我按照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

任何帮助将是惊人的,谢谢!此外,在问这个问题之前,我看了很多其他的帖子,并尝试了很多不同的路由和属性。

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

在你的WebApiConfig config.MapHttpAttributeRoutes();中添加这一行在你的config.Routes.MapHttpRoute()之前

我实际上能够使用解决方案中描述的方法使其工作:MVC 4.5 Web API路由不工作?我昨天试着这样做,它似乎不正确,但经过更多的吐槽和润色,我最终获得了正确的路线。他们建议按照如下方式配置路由:

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调用和我的restful服务来匹配,但尽管如此,我又能正常工作了。