2sxc CustomWebApi启用CORS

时间:2018-09-23 09:45:23

标签: asp.net-web-api dotnetnuke 2sxc

我创建自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)]

1 个答案:

答案 0 :(得分:1)

完美,听起来像是您可以使用它,但实际上并不是CORS问题。

还有一些其他信息:如果您确实要为其他域启用CORS 身份验证,则需要进行更深入的了解,因为在这种情况下,浏览器将对真正检查是否允许在请求中包含身份验证和cookie。这是IMHO DNN所不提供的,您必须使用asp.net魔术将其启用-基本上是通过为预检创建一个特殊的请求处理程序,或者在web.config中使用asp.net标头重写。