我有这个应用程序,我想在Web.Config中设置我的自定义标题,唉,这并不总是万无一失.
<customHeaders>
<add name="Access-Control-Allow-Origin" value="*" />
<add name="Access-Control-Allow-Methods" value="*" />
<add name="Access-Control-Allow-Headers" value="*" />
</customHeaders>
Run Code Online (Sandbox Code Playgroud)
上面的设置和它的迭代如
<customHeaders>
<add name="Access-Control-Allow-Origin" value="*" />
<add name="Access-Control-Allow-Methods" value="OPTIONS,GET,PUT,DELETE,POST" />
<add name="Access-Control-Allow-Headers" value="Authorization,Content-Type" />
</customHeaders>
Run Code Online (Sandbox Code Playgroud)
在所有场景中都没有为我工作过.到目前为止,这种设置在大约50%的测试机器中起作用,405 Method Not Allowed在其他测试机器中起作用.
替代方法是在WebApiConfig.cs此处设置并取消注释自定义标头Web.config.
//Web API Cross origin requests - Enable
var cors = new EnableCorsAttribute("*", "*", "*");
config.EnableCors(cors);
Run Code Online (Sandbox Code Playgroud)
为什么这里有这么多的含糊不清,我怎么知道哪些地方CORS会一直有效?我真的很感兴趣设置CORS,Web.config因为我希望在部署版本中灵活地修改它.
我有两个项目客户端和服务器端.客户端项目是纯htmljs.服务器端是ASP.NET MVC 4和Web Api.因为我需要两个项目来启用CROS功能.我添加到服务器的webconfig中:
<system.webServer>
<httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Origin" value="*" />
<add name="Access-Control-Allow-Headers" value="Content-Type" />
</customHeaders>
</httpProtocol>
</system.webServer>
Run Code Online (Sandbox Code Playgroud)
正在运行的Ajax Post版本:
$.post(url, appContext).done(
function(data, textStatus, jqXHR) {
successFn(data, textStatus);
})
.fail(
function(jqXHR, textStatus, err) {
errorFn(err, textStatus);
});
Run Code Online (Sandbox Code Playgroud)
angular $ http发布版本不起作用:
$http({
url: url,
method: 'POST',
params: { appContext: appContext },
headers: {
'Content-Type': 'application/x-www-form-urlencoded'
/*'Accept': 'text/json'*/}
}).success(successFn).error(errorFn);
Run Code Online (Sandbox Code Playgroud)
当我使用$ http时,我收到两个错误:
ASP.NET MVC方法是
[System.Web.Http.HttpPost]
public List<Module> GetModules([FromBody]SessionContext appContext)
{
return CreateModules();
}
Run Code Online (Sandbox Code Playgroud)
编辑:
角度模型的配置:
var …Run Code Online (Sandbox Code Playgroud)