我在我的mvc应用程序中有一个api控制器,我试图将数据发布到api,但我在ASP.NET Web API中遇到了跨源请求的问题。这是我的错误
XMLHttpRequest无法加载http://192.168.0.44:100/api/name。对预检请求的响应未通过访问控制检查:请求的资源上不存在“Access-Control-Allow-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中
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。对预检请求的响应未通过访问控制检查:请求的资源上不存在“Access-Control-Allow-Origin”标头。因此,'http://localhost:53114'原产地不允许进入。响应的HTTP状态代码为500。
哪里是我的错?
请尝试以下步骤。
在web.config中
config.EnableCors();
在你的控制器中添加它
[EnableCors(origins: "http://mywebclient.azurewebsites.net", headers: "*", methods: "*")]
注意:origin应该是客户端地址,而不是服务器地址,并确保不要在origin URL的末尾添加黑色斜杠。
这是在调用Web API时显示的错误。它背后有两个原因。
我们可以在webapiconfig.cs文件中启用CORS
CONFIG.EnableCors(cors);
要解决标题,我们应该允许WEB API允许所有标题如下所示
EnableCorsAttribute cors = new EnableCorsAttribute("*", "*", "*");