所以我目前正在为我正在开发的项目实现安全性,我按照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
任何帮助都会很棒,谢谢! 此外,我查看了许多其他帖子,并在提出此问题之前尝试了很多路由和属性的变体。
答案 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电话和我的宁静服务以配合,但尽管如此,我又恢复了运作。