24 c# asp.net-mvc cors asp.net-web-api2
我创建了一个web api 2,我正在尝试对它进行跨域请求,但是我收到以下错误:
选项http://www.example.com/api/save 405(方法不允许)
我已经浏览了一下这个问题的大多数解决方案是说我需要从NuGet安装COR并启用它所以我已经安装了包并标记了我的控制器
[EnableCors("*", "*", "*")]
Run Code Online (Sandbox Code Playgroud)
但这仍然没有解决问题.
我ApiController只有以下Save方法:
[ResponseType(typeof(int))]
public IHttpActionResult Save(Student student)
{
if (ModelState.IsValid)
{
using (StudentHelper helper = new StudentHelper())
{
return Ok(helper.SaveStudent(student));
}
}
else
{
return BadRequest(ModelState);
}
}
Run Code Online (Sandbox Code Playgroud)
这是我来自不同领域的js:
$.ajax({
type: "POST",
crossDomain: true,
data: JSON.stringify(student),
crossDomain: true,
url: 'http://www.example.com/api/save',
contentType: "application/json",
success: function (result) {
console.log(result);
}
});
Run Code Online (Sandbox Code Playgroud)
我还需要做些什么来实现这个目标吗?
小智 25
通过nuget为您的项目安装CORS Web API包:
安装包Microsoft.AspNet.WebApi.Cors
在WebApiConfig中添加以下行:
var cors = new EnableCorsAttribute ("*", "*", "*");
config.EnableCors (cors);
Run Code Online (Sandbox Code Playgroud)
确保在Web.config中将OPTIONS作为允许的动词之一,并由默认处理程序处理。
<system.web>
...
<httpHandlers>
...
<add path="*" verb="OPTIONS" type="System.Web.DefaultHttpHandler" validate="true"/>
<add path="*" verb="TRACE" type="System.Web.DefaultHttpHandler" validate="true"/>
<add path="*" verb="HEAD" type="System.Web.DefaultHttpHandler" validate="true"/>
Run Code Online (Sandbox Code Playgroud)
This one solved my problem
Step 1
安装 Cors 包Microsoft.AspNet.WebApi.Cors(右键解决方案 > 管理 Nuget 包 > 然后搜索 Cors)
第2步
将此行放在WebApiConfig.cs文件中
public static void Register(HttpConfiguration config)
{
config.EnableCors(new EnableCorsAttribute("http://localhost:3000", headers: "*", methods: "*"));
.
.
.
}
Run Code Online (Sandbox Code Playgroud)
将http://localhost:3000更改为 API Caller 的地址
小智 2
最后我通过改变ajax请求解决了这个问题。我发现OPTIONS预检仅在某些情况下发送 - 其中之一是如果请求包含Content-Type不属于以下类型之一:
因此,通过删除我的 ajax 请求中的内容类型并将其更改为以下内容:
$.ajax({
type: "POST",
crossDomain: true,
data: student,
dataType: 'json',
url: 'http://www.example.com/api/save',
success: function (result) {
console.log(result);
}
});
Run Code Online (Sandbox Code Playgroud)
我能够让它工作。
| 归档时间: |
|
| 查看次数: |
25886 次 |
| 最近记录: |