同时调整CORS以获取令牌(Web API 2)和其他GET \ POST方法

时间:2017-12-06 16:38:46

标签: asp.net-web-api cors

未设置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 statusGet 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[] { "*" });

settings for get token

这有助于获得令牌。 但。 现在,其他方法返回状态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

0 个答案:

没有答案