我创建自SxcApiController继承的自定义webapi, 但是当我尝试使用来自不同域的此api时,出现消息:
No 'Access-Control-Allow-Origin' header is present on the requested resource.
我的控制器方法中具有以下属性:
[HttpPost]
[DnnModuleAuthorize(AccessLevel = SecurityAccessLevel.Anonymous)]
我这样调用我的方法:
$.ajax({
url: apiurl,
type: 'POST',
//headers: {
// 'Access-Control-Allow-Origin': '*'
//},
//crossDomain: true,
dataType: 'json',
data: data,
success: function (d) {
debugger;
alert("Saved Successfully");
},
error: function (d) {
debugger;
alert("Error please try again");
}
});
如果启用crossDomain并添加标题,则错误更改为:
Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.
我认为SxcApiController是从DNN Api Controller继承的,并且也不知道如何在DNN上启用CORS
为该方法启用CORS还缺少什么?
==============编辑1 ===============
我将其添加到托管api的web.config中:
<httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Origin" value="*" />
现在错误是:
401 (Unauthorized)
我还想念什么?
==============编辑2:现在可以了===============
我在方法中添加了此属性,现在可以了:
[HttpPost]
[AllowAnonymous]
[DnnModuleAuthorize(AccessLevel = SecurityAccessLevel.Anonymous)]
答案 0 :(得分:1)
完美,听起来像是您可以使用它,但实际上并不是CORS问题。
还有一些其他信息:如果您确实要为其他域启用CORS 身份验证,则需要进行更深入的了解,因为在这种情况下,浏览器将对真正检查是否允许在请求中包含身份验证和cookie。这是IMHO DNN所不提供的,您必须使用asp.net魔术将其启用-基本上是通过为预检创建一个特殊的请求处理程序,或者在web.config中使用asp.net标头重写。