を使用します。Config.Routes.MapHttpRoute()
で動作するデフォルトルートを取得できない場合がありますが、コントローラにルート属性としてルートを入力すると正常に動作します。WebAPI MapHttpRouteは動作しませんが、AttributeRoutingは
Global.asaxの
protected void Application_Start() {
AreaRegistration.RegisterAllAreas();
WebApiConfig.Register(GlobalConfiguration.Configuration);
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
//RouteConfig.RegisterRoutes(RouteTable.Routes);
//BundleConfig.RegisterBundles(BundleTable.Bundles);
}
(彼らは私がそれらを残していても非WebAPIの要件(右?)と同じ結果だとして最後の2を削除)
WebApiConfig.cs
public static void Register(HttpConfiguration config) {
// Web API configuration and services
// Web API routes
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "v1/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
コントローラ
public class ErrorsController : ApiController
{
[HttpGet]
[Route("v1/Errors/Get")]
public IHttpActionResult Get(int id) {
return Ok();
}
[HttpPost]
[Route("v1/Errors/Submit")]
public IHttpActionResult Submit()
{
// do stuff
return Ok();
}
}
属性のルートがある場合はすべて正常です。私がしなければ、私は404を得る。たとえば、次の2つのレポート404エラー:
localhost:myport/v1/Errors/Get?id=5
localhost:myport/v1/Errors/Submit
しかし、私はこの提出する場合:
:localhost:myport/v1/Errors
を、私は、次の応答を取得
No HTTP resource was found that matches the request URI ' http://localhost:59498/v1/Errors/ '.
No type was found that matches the controller named 'v1'.
明らかに私のルート構成は蹴られていませんが、私の人生のために私はなぜそれを伝えることはできません。私も多分Default
は、いくつかの内部的意義を持っていたことを考えて、Default
代わりのDefaultApi
にルート名を変更してみました。
ヘクタールああ...それは理にかなっています。しかし、これを確認するには、非Web APIルーティングの特殊なルートでも問題ありませんか? (私は、通常のMVCでは非デフォルトルートとして接頭辞付きの同様の構文を使用してきました)。いずれにしても、答えをありがとう - 今私は理由を知っています(そして役に立つリンクもあります)。 – jleach