我正在使用C#的Web API,并从React应用程序调用它。从前端:
const resp = await axios.post("http://localhost:26594/api/Member/Login", {
member: user,
sessionid,
});
在我安装的web API中:
在WebAPIConfig.cs中,我添加了:
var cors = new EnableCorsAttribute("*", "*", "*");
config.EnableCors(cors);
但当我尝试调用它时,我收到:
然后我尝试添加web.config:
<httpProtocol>
<customHeaders>
<!-- Adding the following custom HttpHeader
will help prevent CORS from stopping the Request-->
<add name="Access-Control-Allow-Origin" value="*" />
</customHeaders>
</httpProtocol>
和/或
<remove name="ExtensionlessUrlHandler-Integrated-4.0" />
<remove name="OPTIONSVerbHandler" />
<add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
但是没有任何效果!
注意:我尝试了一个GET方法,并正常工作。POST方法不起作用。
3条答案
按热度按时间zbq4xfa01#
执行以下步骤
1.打开项目的App_Start文件夹中的WebApiConfig.cs文件。
1.将以下代码添加到Register方法:
//启用CORS全局配置.EnableCors();
1.将[EnableCors]属性添加到控制器或控制器方法。
【EnableCors(起源:“",header:“",方法:“”)] public class MyController:ApiController { //控制器方法...}
请注意,origins、header和methods参数指定了CORS策略。在本例中,策略允许来自任何来源()、具有任何标头和任何HTTP方法的请求。
或者,您可以创建一个单独的类来配置CORS策略,并在Register方法中引用它:
然后在Register方法中调用它:
ee7vknir2#
已解决。
原来IIS中有一个设置不允许OPTIONS predicate 。
若要检查,请打开IIS,如果列出了您的网站,请单击它,或单击“默认网站”。在IIS部分下单击“请求筛选”。
如果你看到的是空列表,那么所有的动词都是允许的。否则,如果你看到动词,旁边是“假”,那么它是不允许的。所以从列表中删除它以允许它。
**注意:如果您的API不允许CORS,则您将收到405 not allowed。如果IIS出现上述错误,您将收到404 Not Found。
bpzcxfmw3#
如果您使用的是ASP.NETCore,则需要在Startup类的Configure方法中启用CORS中间件。你可以通过添加以下代码来实现这一点: