配置:Angular6发送一个HTTP请求;它是本地主机:4200。请求是指向位于端口4000的IIS上的实体框架(Standard.net)。
它向/api/registration/createnew发送一个post,并在主体中传递数据对象。
使用直接发送到localhost:4000的浏览器,将控制器get函数作为非CORS请求进行测试,它们工作正常。
错误:“访问xmlhttprequest at”
http://localhost:4000/api/Registration/CreateNew
“起源”
http://localhost:4200
'已被CORS策略阻止:对飞行前请求的响应未通过访问控制检查:注册:1它没有HTTP OK状态。'
下面是4200(角度)的头请求和响应的小提琴快照。
IIS实体框架webconfig:
<appSettings>
<add key="webpages:Version" value="3.0.0.0" />
<add key="webpages:Enabled" value="false" />
<add key="ClientValidationEnabled" value="true" />
<add key="UnobtrusiveJavaScriptEnabled" value="true" />
<add key="allowedCorsOrigins" value="http://localhost:4200" />
<add key="allowedCorsMethods" value="get, post, put, delete, options, batch" />
<add key="allowedCorsHeaders" value="*" />
</appSettings>
应用程序启动/webapiconfig.cs
public static void Register(HttpConfiguration config)
{
config.EnableCors();
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
还向控制器类添加了class属性:
[RoutePrefix("api/Registration")]
[EnableCors(origins: "http://localhost:4200", headers: "*", methods: "*")]
public class RegistrationController : ApiController
{
根据上面显示的fiddler头,似乎应该发生CORS请求。我在IIsController行上有断点,它们永远不会被击中,因此如果我正确理解它,“飞行前”请求将无法允许CORS请求。
不幸的是,这是一个相当大的代码块,很难放到网络上。