0

ASP.NET Web API プロジェクトを作成しましたが、「PUT」、「GET」などの動詞を使用したくないため、WebApiConfig に独自のルートを作成しました。

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

次に、非常にシンプルな ApiController を作成しました

public class EWebApiController : ApiController
{
    public HttpResponseMessage ByEntryFilter(long? id)
    {
        HttpResponseMessage response = Request.CreateResponse<string>(HttpStatusCode.OK, "Test string");
        return response;
  }
}

これで、Web アプリケーションを開始して WebApi をホストできるようになりました。

次に、WebApi 関数を呼び出す単純なコンソール アプリケーションを作成しました。

static void Main(string[] args)
{
    //WebClient webClient = new WebClient();
    //byte[] data = webClient.DownloadData("http://localhost:51762/api/EWebApi/ByEntryFilter/2/");
    //string date = System.Text.Encoding.Default.GetString(data);

    HttpClient client = new HttpClient();
    client.BaseAddress = new Uri("http://localhost:51762/");
    client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

    HttpResponseMessage response = client.GetAsync("api/EWebApi/ByEntryFilter/2").Result;  // Blocking call!
    if (response.IsSuccessStatusCode)
    {
           //Never Reached because auf 405 method not allowed
    }
}

そして、ここで私は常に405メソッドが許可されていないというエラーを受け取ります。WebClient と HttpClient 呼び出しの両方を使用します。

デフォルトの ApiRoute を使用して GET を使用すると、...動詞はすべて機能します。

それは「WebDav」の問題ではありません。それはインストールされておらず、私のWeb.Configでは「」で削除しました....

WebProject 内の Web サイトでルートをローカルの jQuery AJAX 呼び出しで使用している場合、ApiRoute も魅力的に機能し、405 エラーは発生しません。

4

1 に答える 1

0

Restfulパターン接辞 GET、PUT、DELETE、POSTを使用していない場合は、これがどのHTTPメソッドになるAttributesかをアクションに伝える必要があります。

[AcceptVerbs("GET", "HEAD")]
public HttpResponseMessage ByEntryFilter(long? id)
{
    HttpResponseMessage response = Request.CreateResponse<string>(HttpStatusCode.OK, "Test string");
    return response;
}

または

[HttpGet]
[ActionName("ByEntryFilter")]
public HttpResponseMessage ByEntryFilter(long? id)
{
    HttpResponseMessage response = Request.CreateResponse<string>(HttpStatusCode.OK, "Test string");
    return response;
}

詳細はこちら: ASP.NET Web API でのルーティング

于 2013-09-16T19:49:11.203 に答える