1

正常に動作する Web API プロジェクトがありました。これを MVC プロジェクトにマージしたところ、URI パラメーターを持つアクションのみが機能するようになりました。他のすべてのアクションは、コントローラーでさえ見つからない 404 Not Found で終了します。

これが私が WebApiConfig に持っているものです(標準のもの):

public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
        // Web API configuration and services
        // Configure Web API to use only bearer token authentication.
        config.SuppressDefaultHostAuthentication();
        config.Filters.Add(new HostAuthenticationFilter(OAuthDefaults.AuthenticationType));

        // Web API routes
        config.MapHttpAttributeRoutes();

        config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );
    }        
}

コントローラークラスは次のとおりです。

[Authorize]
[RoutePrefix("api/WikiPlan")]
public class WikiPlanController : ApiController

動作するアクションは次のとおりです。

http://localhost:2000/api/WikiPlan/SearchWikiPlans/baby
[AllowAnonymous]
[HttpGet]
[Route("SearchWikiPlans/{keyword}")]
[ResponseType(typeof(List<WikiPlanSearchResultViewModel>))]
public IHttpActionResult SearchWikiPlans(string keyword)

これは機能しないものです(独自のプロジェクトにあったときに機能していました):

http://localhost:2000/api/WikiPlan/TopWikiPlans
[AllowAnonymous]
[HttpGet]
[Route("TopWikiPlans")]
[ResponseType(typeof(List<TopWikiPlan>))]
public IHttpActionResult TopWikiPlans()

何が悪いのかわかりません。ご協力いただきありがとうございます!

4

1 に答える 1

4

この Route Debugger ツール ( http://blogs.msdn.com/b/webdev/archive/2013/04/04/debugging-asp-net-web-api-with-route-debugger.aspx ) のおかげで、壊れた URL を追跡し、問題を突き止めました。

フレームワークは、壊れた URL を API ルートではなく MVC ルートと照合していたことが判明しました。そのため、API ルートを登録する呼び出しを Global.asax の MVC ルートの上に移動したところ、正しく一致するようになりました。

于 2014-07-06T02:57:51.147 に答える