具有自定义标头的Ajax请求到其他域WebApi

时间:2014-05-06 19:18:45

标签: c# javascript jquery ajax asp.net-web-api

我想使用JQuery Ajax方法向其他域WebApi发送请求。它没有标题。但是,当我发送带有自定义标头的Ajax请求时,我得到" 405-> Method Not Allowed"浏览器出错。

不起作用

$.ajax({
        url: "http://localhost:53103/api/Values",
        headers: { "ABC123": "ABC abc 123" }
       });

此调用点击 ValuesController 构造函数,但未点击 Get()方法。

此作品

$.ajax({
        url: "http://localhost:53103/api/Values"
       });

此代码没有任何问题。

服务器端WebAPI

 public class ValuesController : ApiController
 {
    public ValuesController()
    {}

    // GET api/values
    public IEnumerable<string> Get()
    {
        return new string[] { "value1", "value2" };
    }
 }

在服务器上我有vanilla WebApi项目。我也在system.webServer部分启用了CORS。

  <httpProtocol>
      <customHeaders>
        <add name="Access-Control-Allow-Origin" value="*" />
        <add name="Access-Control-Allow-Methods" value="GET, POST, OPTIONS, PUT, DELETE" />
        <add name="Access-Control-Allow-Headers"  value="*" />
      </customHeaders>
    </httpProtocol>

正如我之前提到的在web.config中启用CORS之后我可以使用简单的ajax请求访问数据但是当我发送带有标头的ajax请求时我得到了#34; 405方法不允许&#34;错误。 我应该这样做,以便我可以将带有标题的请求发送到其他域WebApi。

1 个答案:

答案 0 :(得分:0)

试试这个:

$.ajax({
        type:"GET",
        beforeSend: function (request)
        {
            request.setRequestHeader("ABC123", "ABC abc 123");
        },
        url:"http://localhost:53103/api/Values"
      });