У меня есть следующие настройки маршрутов:
RouteTable.Routes.MapHttpRoute(
name: "ActionApi",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional });
RouteTable.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = System.Web.Http.RouteParameter.Optional },
constraints: null,
handler: new WebApiMessageHandler(GlobalConfiguration.Configuration));
и следующие настройки контроллера;
public class GetFileController : ApiController
{
[HttpGet]
public HttpResponseMessage Get(string id)
{
return Request.CreateResponse(HttpStatusCode.OK);
}
}
У меня проблема в том, что этот URL
/api/GetFile/id_is_a_string
возвращает эту ошибку;
<Error>
<Message>
No HTTP resource was found that matches the request URI /api/GetFile/id_is_a_string.
</Message>
<MessageDetail>
No action was found on the controller 'GetFile' that matches the name 'id_is_a_string'.
</MessageDetail>
</Error>
Можно ли как-то обойтись, если не считать, что строковый параметр на самом деле является именем действия?
Я знаю, что мог бы изменить URL своего запроса на be;
/api/GetFile?id=id_is_a_string
но это изменение маршрутизации затрагивает многие другие контроллеры, которые я уже установил, и на самом деле не через sh до go через все, чтобы переключить его для отправки запроса таким способом .
Если я переупорядочиваю маршруты, кажется, что это работает, как и раньше, но для моего нового контроллера, который в идеале мне бы хотелось иметь в пределах нескольких конечных точек, я получаю эту ошибку;
ExceptionMessage=Multiple actions were found that match the request:
Новый контроллер
public class GettingThingsController : ApiController
{
[HttpPost]
public IHttpActionResult GetPeople()
{
return Ok();
}
[HttpPost]
public IHttpActionResult GetProducts()
{
return Ok();
}
}
Есть ли какой-либо способ достижения того, что мне нужно?!