11

デフォルトのWebAPIルートを使用

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

とコントローラー

public class TestController : ApiController
{
    [HttpGet]
    public HttpResponseMessage Get(string id)
    {
        return Request.CreateResponse(HttpStatusCode.OK, id);
    }
}

へのリクエスト'api/test/1'

戻り値1

何らかの理由でリクエストを送信する場合'api/test/1%20'

ルート404。

ブラウザが末尾のスペースをトリミングするため、この例はばかげているように見えるかもしれませんが、

次のようなルートの場合'api/{controller}/{id}/{extrastuff}'

のスペースは'1 'に変換され'1%20'、リクエストはルート上で404が見つかりません。

4

2 に答える 2

36

問題はWebAPI自体とは関係ありませんが、Asp.Netが特定のURLを処理する方法とは関係ありません。また、Asp.NetはこれらのURLを非常に偏狭な方法で処理するため、リラックスするように指示する必要があります。

この行をweb.configの次の場所に追加しますsystem.web

<httpRuntime relaxedUrlToFileSystemMapping="true" />

あなたはこのトピックについてもっと読むことができます:

SOでも:

于 2012-11-15T21:47:40.043 に答える
1

これをハンドラーに追加します

      <add name="ExtensionlessUrlHandler-Integrated-4.0-ForApi"
     path="api/*"
     verb="*"
     type="System.Web.Handlers.TransferRequestHandler"
     preCondition="integratedMode,runtimeVersionv4.0" />
    </handlers>
  </system.webServer>
于 2016-12-15T12:57:12.893 に答える