1
この問題の名前を付ける方法がわかりません。私はこのような理由でこの特定の問題を探し出すことも困難でした。私が見つけた最も近い一致する質問はWeb Api Routing conflict for two different controllers?でした。複数のコントローラーを使用してサブルートにPUTメソッドを追加するとWeb APIが競合します
public class JobsController : ApiController
{
[ResponseType(typeof(DTJob[]))]
public async Task<HttpResponseMessage> Get()
{
//...
}
[Route("v1/Jobs/Group"), ResponseType(typeof(DTJob[]))]
public async Task<HttpResponseMessage> GetFromGroup()
{
//...
}
[HttpGet, Route("v1/Jobs/{jobId}/Status"), ResponseType(typeof(string))]
public async Task<HttpResponseMessage> GetStatus(long jobId)
{
//...
}
[HttpPut, Route("v1/Jobs/{jobId}/Status"), ResponseType(typeof(void))]
public async Task<HttpResponseMessage> UpdateStatus(long jobId, string status)
{
//...
}
//This method messes up all other controllers
[HttpPut, Route("v1/Jobs/{jobId}"), ResponseType(typeof(void))]
public async Task<HttpResponseMessage> Put(long jobId, DTJob job)
{
//...
}
//But it works if I replace the above method with the default routing pattern:
//[ResponseType(typeof(void))]
//public async Task<HttpResponseMessage> Put(long id, DTJob job)
//{
// //...
//}
}
および類似の接頭辞がある別のコントローラ:
[RoutePrefix("v1/Jobs/Materials")]
public class MaterialsController : ApiController
{
[Route, ResponseType(typeof(DTMaterial[]))]
public async Task<HttpResponseMessage> Get()
{
//...
}
}
そして、私のルーティングのconfigsを:その質問でアスカー同様
、私はまた、部分的に一致する2つの異なるコントローラを持っているpublic class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapMvcAttributeRoutes();
}
}
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
//...
// Web API routes
config.MapHttpAttributeRoutes();
//...
config.Routes.MapHttpRoute(
name: "Newest",
routeTemplate: "v1/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
}
ここでは何が起こっていますか?