3

「UploadsController」というコントローラーがあります。次のような GET アクションがあります。

public string GetUpload([FromUri]string action)
{
    return "hey " + action;
}

ブラウザで次の API URL に移動すると、成功した応答が返されます。

http://localhost:52841/MySite/api/uploads?action=testaction

しかし、WebForms アプリでコード ビハインドから API を呼び出そうとすると、404 応答が返されます。

Global.aspx ファイルにあるものは次のとおりです (最初のファイルで実行する必要があると思いますが)。

    RouteTable.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{id}",
            defaults: new { id = System.Web.Http.RouteParameter.Optional }
    );
    RouteTable.Routes.MapHttpRoute(
           name: "Default2Api",
           routeTemplate: "api/{controller}/{action}",
           defaults: new { controller = "Uploads", action = "GetUpload" });

API を呼び出す方法は次のとおりです。

    // Send a request asynchronously continue when complete 
    client.GetAsync("http://localhost:52841/MySite/api/uploads?action=testaction").ContinueWith(
        (requestTask) =>
        {
            // Get HTTP response from completed task. 
            HttpResponseMessage response = requestTask.Result;

            // Check that response was successful or throw exception 
            response.EnsureSuccessStatusCode();

            // Read response asynchronously as JsonValue
            response.Content.ReadAsAsync<string>().ContinueWith(
                        (readTask) =>
                        {
                            var result = readTask.Result;
                            //Do something with the result                   
                        });
        });

私は以前にこれをやったと思っていました(RCバージョンで、現在RTMを使用しています)が、これを取得できないようです.

補足として、何らかの理由でリクエストがフィドラーに表示されません。これは、これらの種類のものをデバッグしようとしているときにちょっと面倒です。

どんな助けでも大歓迎です。

4

2 に答える 2

2
  1. クエリ文字列パラメーターに別の名前を付けてみてください (現在は「アクション」です)。トラブルの原因の一つだと思います。MVC は規約に基づいているため、問題が発生する可能性があります。
  2. また、ルート宣言で、クエリ文字列パラメーターを追加してみてください ( custActionと呼びましょう)。
  3. デフォルトルートの前にカスタムルートを宣言します。

コードサンプル:

RouteTable.Routes.MapHttpRoute(
name: "Default2Api",
       routeTemplate: "api/{controller}/{action}",
       defaults: new { controller = "Uploads", action = "GetUpload", custAction = RouteParameter.Optional});
于 2012-12-04T12:54:16.033 に答える
1

はい、私は同じ問題を経験しました。おそらくあなたの問題は、webapiがデフォルトでクロスドメイン呼び出しを許可していないか、少なくともこれについて私が知っていることです。

CORS サポートを Web API コードに追加する必要があります。この男が示したリンクに従ってください CORS を webapi に追加する方法

http://code.msdn.microsoft.com/CORS-support-in-ASPNET-Web-01e9980a

幸運を。

于 2012-12-04T14:37:56.570 に答える