未设置CORS时:
控制器“帐户”,方法“注册”(POST)返回 错误403(不能支持Http-method \“OPTIONS。”) - screen error
行。启用跨源请求(add settings cors):
public static void Register(HttpConfiguration config)
{
config.EnableCors();
在控制器(add settings cors to controller)中:
[EnableCors(origins: "localhost:50832", headers: "*", methods: "*")]
[Authorize]
[RoutePrefix("api/Account")]
public class AccountController : ApiController
现在方法“注册”工作!
确定。
我从服务器获取了一个令牌 - Get token status,Get token response
但浏览器控制台中出现错误(Get token response):
无法加载http://localhost/debugPWApi/Token:否 请求中存在“Access-Control-Allow-Origin”标头 资源。因此不允许来自“localhost:50832” 访问。
在StackOverflow中,我找到了这个解决方案(https://stackoverflow.com/a/28571892/5197315):
public static ApplicationUserManager Create(IdentityFactoryOptions<ApplicationUserManager> options, IOwinContext context)
{
//context.Response.Headers.Add("Access-Control-Allow-Origin", new[] { "*" });
这有助于获得令牌。 但。 现在,其他方法返回状态500并响应:
{“Message”:“Произошлаошибка。”,“ExceptionMessage”:“指定的 政策来源“http://http://localhost:50832”无效。一定不能 包含路径,查询或 片段 “” ExceptionType。 “:” System.InvalidOperationException “ ”堆栈跟踪“:” System.Web.Http.Cors.EnableCorsAttribute.ValidateOrigins(IList`1 起源)\ r \ nв System.Web.Http.Cors.EnableCorsAttribute.GetCorsPolicyAsync(HttpRequestMessage 请求,取消语音取消语句)\ r \ nв System.Web.Http.Cors.CorsMessageHandler.d__10.MoveNext(个)\ r \ n --- Конецтрассировкастекаизпредыдущегорасположения,гдевозникло исключение--- \ r \nв System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()\ r \nв System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务 任务)\ r \ nв System.Web.Http.Cors.CorsMessageHandler.d__b.MoveNext(个)\ r \ n --- Конецтрассировкастекаизпредыдущегорасположения,гдевозникло исключение--- \ r \nв System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()\ r \nв System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务 任务)\ r \ nв System.Web.Http.Cors.CorsMessageHandler.d__0.MoveNext()“}
UPD 谢谢@sideshowbarker,我非常不体贴。 修复路径错误。
浏览器控制台现在出现错误
无法加载http://localhost/debugPWApi/api/Users/GetName:响应 预检请求不通过访问控制检查: 'Access-Control-Allow-Origin'标头包含多个值'*, http://localhost:50832',但只允许一个。起源 因此,“http://localhost:50832”不允许访问。
方法返回状态200