2016-03-15 79 views
1

我在我的mvc应用程序中有一个api控制器,我试图将数据发布到api,但我遇到了问题ASP.NET Web API中的跨域请求。这是我的错误ASP.NET Web API中的跨域请求

XMLHttpRequest无法加载http://192.168.0.44:100/api/name。对预检请求的响应不会通过访问控制检查:请求的资源上不存在“访问控制 - 允许来源”标头。因此'Origin'http://localhost:53114'不允许访问。响应有HTTP状态代码405

我已经安装在的ASP.NET Web API 跨域请求2

我API代码

namespace Restaurant.Controllers{ 
[EnableCors(origins: "http://192.168.0.44:100", headers: "*", methods: "get,post")] 

    public class OrderController : ApiController 
    { 
     public Test Post(string name,int age) 
     { 
      Test test = new Test() 
      { 
       Name=name, 
       Age=age 
      }; 
      db.test.Add(test); 
      db.SaveChanges(); 
      return test; 
     }} 

WebApiConfig

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

查看

<script type ="text/javascript"> 
function add() {  
     var DatatTest = { 
     name: $("#txtname").val(), 
     age: $("#txtage").val() 
    }; 
    $.ajax({    
     url: 'http://192.168.0.44:100/api/name', 
     type: 'Post', 
     data: JSON.stringify(DatatTest), 
     contentType: "application/json; charset=utf-8", 
     success: function (data) { 
      alert("ok");}, 
     error: function (x, y, z) { 
      alert("error");} 
    }); 
} 
</script> 

的web.config

​​

现在我得到这个错误

的XMLHttpRequest无法加载http://192.168.0.44:100/api/Order。对预检请求的响应不会通过访问控制检查:请求的资源上不存在“访问控制 - 允许来源”标头。因此'Origin'http://localhost:53114'不允许访问。该响应具有HTTP状态码500.

我的错误在哪里?

回答

1

请尝试以下步骤。

在web.config中

config.EnableCors(); 

在您的控制器添加此

[EnableCors(origins: "http://mywebclient.azurewebsites.net", headers: "*", methods: "*")] 

注:起源应该是客户地址,而不是服务器地址,并确保你不添加源网址末尾有黑色斜线。

+0

我希望我已经做到了。可我使用IP的起源是什么? – shamnad

+0

尝试*,看看是否有效 –

+0

我已经尝试过,但仍然有错误 – shamnad

2

这是调用Web API时显示的错误。背后有两个原因。

  1. CORS

我们可以启用webapiconfig的CORS。CS文件

CONFIG.EnableCors(cors); 

解决头,我们应该允许的WebAPI,让所有的标头,如下

EnableCorsAttribute cors = new EnableCorsAttribute("*", "*", "*"); 

Reference Article