我的mvc应用程序中有一个api控制器,我试图将数据发布到api,但我在ASP.NET Web API中遇到了跨源请求的问题。这是我的错误
XMLHttpRequest无法加载http://192.168.0.44:100/api/name。对预检请求的响应没有通过访问控制检查:否'访问控制 - 允许 - 来源'标头出现在请求的资源上。起源' 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
httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Headers" value="Content-Type" />
<add name="Access-Control-Allow-Methods" value="GET, POST, PUT, DELETE, OPTIONS" />
</customHeaders>
</httpProtocol>
现在我收到此错误
XMLHttpRequest无法加载http://192.168.0.44:100/api/Order。对预检请求的响应没有通过访问控制检查:否&#39;访问控制 - 允许 - 来源&#39;标头出现在请求的资源上。起源&#39; http://localhost:53114&#39;因此不允许访问。响应的HTTP状态代码为500。
我的错误在哪儿?
答案 0 :(得分:2)
调用Web API时显示错误。它背后有两个原因。
我们可以在webapiconfig.cs文件中启用CORS
CONFIG.EnableCors(cors);
解决标题我们应该允许WEBAPI允许所有标题如下
EnableCorsAttribute cors = new EnableCorsAttribute("*", "*", "*");
答案 1 :(得分:1)
请尝试以下步骤。
在web.config中
config.EnableCors();
在您的控制器中添加此
[EnableCors(origins: "http://mywebclient.azurewebsites.net", headers: "*", methods: "*")]
注意:origin应该是客户端地址,而不是服务器地址,并确保不要在origin URL的末尾添加黑色斜杠。