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
任何帮助将是惊人的,谢谢!此外,在问这个问题之前,我看了很多其他的帖子,并尝试了很多不同的路由和属性。
在你的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服务来匹配,但尽管如此,我又能正常工作了。