このエラーに関して、ここでStackoverflowと他の場所で見つかったすべてのソリューションを試しましたが、まだ問題が発生しています。Web API:ルートコレクションで「X」という名前のルートを見つけることができませんでした。
私たちには、POSTメソッドを持つ.NET APIがあり、それはCreatedAtRouteレスポンス(201)を返します。問題は、CreatedAtRouteレスポンスを返すときに、「Xという名前のルートがルートコレクション内に見つかりませんでした」というエラーが表示されます.Xはルートの名前です。
Global.asaxの
protected void Application_Start()
{
GlobalConfiguration.Configure(WebApiConfig.Register);
GlobalConfiguration.Configuration.UseStructureMap<MasterRegistry>();
var allDirectRoutes = WebApiConfig.GlobalObservableDirectRouteProvider.DirectRoutes;
}
WebApi.config - 私たちは、デフォルトルートの前に宣言MapHttpAttributesを持っています。
public static class WebApiConfig
{
public static ObservableDirectRouteProvider GlobalObservableDirectRouteProvider = new ObservableDirectRouteProvider();
public static void Register(HttpConfiguration config)
{
config.Formatters.Clear();
config.Formatters.Add(new JsonMediaTypeFormatter());
// Web API routes
config.MapHttpAttributeRoutes(GlobalObservableDirectRouteProvider);
config.Routes.MapHttpRoute(
"DefaultApi",
"api/v1/{controller}/{id}",
new { id = RouteParameter.Optional }
);
}
}
コントローラ - GetCompoundByIdルート これは我々が名前のルート
[HttpGet]
[Route("{id:Guid}", Name = "GetCompoundById")]
[SwaggerResponse(HttpStatusCode.OK, Type = typeof(CompoundViewModel))]
public async Task<IHttpActionResult> Get(Guid id)
{
var serviceResult = await Task.FromResult(CompoundService.Get(id));
if (serviceResult == null)
{
return NotFound();
}
CompoundViewModel result =
new CompoundViewModel {Id = serviceResult.Id, Name = serviceResult.Name};
return Ok(result);
}
コントローラ使用して構築するルートである - という名前のため、エラーがスローされた場所ですPOSTアクション に戻るCreatedAtRouteをルートが見つかりません。
return CreatedAtRoute("GetCompoundById", new {id = result.Id}, result);
注:WebApi.configでは私が私が起動時に作成したルートを確認することができますし、私は私の名前のルートがコレクション内に存在を確認できObservableDirectRouteProviderを作成しました。
'public async Task Get(Guid id)'メソッドの全内容を含めてください。 –
mjwills
完全なGet(id)メソッドコードを追加しました –
@ Mr.Bellisルートが無効なルート制約を使用しています。 '[ルート( "{ID:GUID}"、NAME = "GetCompoundById")] – Nkosi