asp.net 网络 api 应用程序中的路由和路由前缀问题
Route and RoutePrefix issue within asp.net web api application
我有一个 Web api 应用程序,我需要在其中更改路由配置。
Javascript
$.ajax({
type: "GET",
url: "api/collaborators",
success: function (data) {
}});
在控制器中
[RoutePrefix("api/")]
public class AccountManageController : BaseApiController
{
[Authorize]
[HttpGet]
[Route("collaborators")]
public IEnumerable<CollaborateurModel> GetAllCollaborators() {...}
}
我收到一个异常,提示找不到服务!!此外,即使我将 url 直接放在浏览器中,我也会得到相同的结果。
WebApiConfig.cs
public static class WebApiConfig
{
public static string UrlPrefix { get { return "api"; } }
public static string UrlPrefixRelative { get { return "~/api"; } }
public static void Register(HttpConfiguration config)
{
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: WebApiConfig.UrlPrefix + "/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional }
);
config.Routes.MapHttpRoute(
name: "DefaultApi2",
routeTemplate: WebApiConfig.UrlPrefix + "/{controller}"
);
}
}
我需要知道
- 出现问题的原因是什么?
- 我该如何解决?
谢谢,
属性路由和模板路由是两个不同的东西。
如果您的路由规则 'matches' 配置了路由模板,则无需添加自定义属性。
但是如果你想使用 'special' routes/actions 的属性 - 使用必须将 MapHttpAttributeRoutes()
添加到你的路由注册逻辑中(在第一次 config.Routes.MapHttpRoute...
调用之前)。
没有这个,你的方法 GetAllCollaborators
可以通过 /api/AccountManage/GetAllCollaborators
url 访问(根据你的第一个路由模板 "DefaultApi")
1) 您正在尝试使用 Attribute Routing ASP.NET Web API 2 but you are not Enabling Attribute Routing
2) 这就是您修复它的方法。
public static class WebApiConfig {
public static string UrlPrefix { get { return "api"; } }
public static string UrlPrefixRelative { get { return "~/api"; } }
public static void Register(HttpConfiguration config) {
//Enable Web API Attribute routing.
config.MapHttpAttributeRoutes();
// Other Web API configuration
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: WebApiConfig.UrlPrefix + "/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional }
);
config.Routes.MapHttpRoute(
name: "DefaultApi2",
routeTemplate: WebApiConfig.UrlPrefix + "/{controller}"
);
}
}
我有一个 Web api 应用程序,我需要在其中更改路由配置。
Javascript
$.ajax({
type: "GET",
url: "api/collaborators",
success: function (data) {
}});
在控制器中
[RoutePrefix("api/")]
public class AccountManageController : BaseApiController
{
[Authorize]
[HttpGet]
[Route("collaborators")]
public IEnumerable<CollaborateurModel> GetAllCollaborators() {...}
}
我收到一个异常,提示找不到服务!!此外,即使我将 url 直接放在浏览器中,我也会得到相同的结果。
WebApiConfig.cs
public static class WebApiConfig
{
public static string UrlPrefix { get { return "api"; } }
public static string UrlPrefixRelative { get { return "~/api"; } }
public static void Register(HttpConfiguration config)
{
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: WebApiConfig.UrlPrefix + "/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional }
);
config.Routes.MapHttpRoute(
name: "DefaultApi2",
routeTemplate: WebApiConfig.UrlPrefix + "/{controller}"
);
}
}
我需要知道
- 出现问题的原因是什么?
- 我该如何解决?
谢谢,
属性路由和模板路由是两个不同的东西。
如果您的路由规则 'matches' 配置了路由模板,则无需添加自定义属性。
但是如果你想使用 'special' routes/actions 的属性 - 使用必须将 MapHttpAttributeRoutes()
添加到你的路由注册逻辑中(在第一次 config.Routes.MapHttpRoute...
调用之前)。
没有这个,你的方法 GetAllCollaborators
可以通过 /api/AccountManage/GetAllCollaborators
url 访问(根据你的第一个路由模板 "DefaultApi")
1) 您正在尝试使用 Attribute Routing ASP.NET Web API 2 but you are not Enabling Attribute Routing
2) 这就是您修复它的方法。
public static class WebApiConfig {
public static string UrlPrefix { get { return "api"; } }
public static string UrlPrefixRelative { get { return "~/api"; } }
public static void Register(HttpConfiguration config) {
//Enable Web API Attribute routing.
config.MapHttpAttributeRoutes();
// Other Web API configuration
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: WebApiConfig.UrlPrefix + "/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional }
);
config.Routes.MapHttpRoute(
name: "DefaultApi2",
routeTemplate: WebApiConfig.UrlPrefix + "/{controller}"
);
}
}