Маршруты атрибутов на нескольких контроллерах соответствуют запрошенному URL
Я использую проект веб-API, где я использовал два контроллера:
Первый контроллер, как показано ниже:
public class SmartlingController : BaseApiController
{
[Route("api/smartling/ProcessSmartlingTranslation")]
[VersionedRoute("", 1)]
[ResponseType(typeof(HttpResponseMessage))]
[HttpPost]
public IHttpActionResult ProcessSmartlingTranslation(HttpRequestMessage request)
{
//some business logic
}
}
Второй контроллер:
public class CommentsController : BaseApiController
{
[Route("api/comments/GetAndPostBlogComments")]
[VersionedRoute("", 1)]
[ResponseType(typeof(HttpResponseMessage))]
[HttpPost]
public IHttpActionResult GetAndPostBlogComments([FromBody] BlogAndStoryComment comment)
{
//some business logic
}
[Route("api/comments/GetAndPostStoryComments")]
[VersionedRoute("", 1)]
[ResponseType(typeof(HttpResponseMessage))]
[HttpPost]
public IHttpActionResult GetAndPostStoryComments([FromBody] BlogAndStoryComment comment)
{
//some business logic
}
}
Ниже приведен метод регистрации web api:
public static void Register(HttpConfiguration config)
{
// Web API routes
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
"DefaultApi",
"api/{controller}/{action}/{id}",
new { id = RouteParameter.Optional }
);
var f = new FormUrlEncodedMediaTypeFormatter();
f.SupportedMediaTypes.Add(new MediaTypeHeaderValue("application/json"));
f.SupportedMediaTypes.Add(new MediaTypeHeaderValue("application/x-www-form-urlencoded"));
config.Formatters.Add(f);
var enableCorsAttribute = new EnableCorsAttribute("*",
"Origin, Content-Type, Accept",
"GET, PUT, POST, DELETE, OPTIONS");
config.EnableCors(enableCorsAttribute);
}
Где мой код не здесь и как я могу исправить эту проблему?
1 ответ
Решение
Шаблон для всех версионных маршрутов в примере одинаков. Это причина противоречивых маршрутов. Обновите версионные шаблоны маршрутов, чтобы сделать их уникальными, или удалите их вместе, чтобы разрешить конфликты маршрутов.
public class SmartlingController : BaseApiController {
//POST api/smartling/ProcessSmartlingTranslation
[Route("api/smartling/ProcessSmartlingTranslation")]
[VersionedRoute("api/smartling/ProcessSmartlingTranslation", 1)]
[ResponseType(typeof(HttpResponseMessage))]
[HttpPost]
public IHttpActionResult ProcessSmartlingTranslation(HttpRequestMessage request) {
//some business logic
}
}
public class CommentsController : BaseApiController {
//POST api/comments/GetAndPostBlogComments
[Route("api/comments/GetAndPostBlogComments")]
[VersionedRoute("api/comments/GetAndPostBlogComments", 1)]
[ResponseType(typeof(HttpResponseMessage))]
[HttpPost]
public IHttpActionResult GetAndPostBlogComments([FromBody] BlogAndStoryComment comment) {
//some business logic
}
//POST api/comments/GetAndPostStoryComments
[Route("api/comments/GetAndPostStoryComments")]
[VersionedRoute("api/comments/GetAndPostStoryComments", 1)]
[ResponseType(typeof(HttpResponseMessage))]
[HttpPost]
public IHttpActionResult GetAndPostStoryComments([FromBody] BlogAndStoryComment comment) {
//some business logic
}
}