0

IM保存发送信息与vNext API(.NET核)咂舌。

当我使用的方法查询得到$资源它的工作,但是当我使用保存在服务器返回415不支持的媒体类型

这是我的资源请求,请参阅IM设置Content-type头:

var req = $resource(raspUrl + resource, data || {}, 
      { 
       save: { 
         method: 'POST', 
         headers: { 'Content-Type': 'application/json' } 
       }, 
       post: { 
         method: 'POST', 
         headers: { 'Content-Type': 'application/json' } 
       } 
      }); 

req.save({name: 'Argate', city: "Campinas - São Paulo"}) 

是什么角JS做时,它的要求去做:

当其发送给服务器,以AngularJS方法reqeust “选项” 发送,服务器没有收到请求。

的XMLHttpRequest无法加载http://192.168.100.100:5000/x/lorem。对预检请求的响应不会通过访问控制检查:请求的资源上不存在“访问控制 - 允许来源”标头。因此不允许访问原产地'http://127.0.0.1:8080'。响应有HTTP状态代码415

我该怎么解决呢? 感谢所有:)

回答

0

@lvanegmond帮助我在这个岗位:

https://github.com/aspnet/Mvc/issues/5591#issuecomment-264961434

与此解决方案:

尝试把app.UseCors( “CorsPolicy”);在app.UseMvc()之前;

从文档: https://docs.microsoft.com/en-us/aspnet/core/security/cors#enabling-cors-with-middleware

要启用CORS为您的整个应用程序的CORS中间件添加到 使用UseCors扩展方法您的请求管道。请注意,CORS中间件必须先于您的应用程序 中您希望支持跨源请求(例如在调用 UseMvc之前)的任何已定义的端点之前。

1

下面是解决这个问题的一些方法:

最佳:CORS头(需要服务器的更改)

CORS(跨来源资源共享)是一种方式服务器说:“我会接受你的请求,即使你来自不同的来源。”这需要服务器的合作 - 所以如果你不能修改服务器(例如,如果你使用的是外部API),这个方法不起作用。

修改服务器以添加标题Access-Control-Allow-Origin:*从任意位置启用跨域请求(或指定域而不是*)。这应该可以解决你的问题。

第二选择:代理服务器

如果不能修改服务器,你可以运行自己的代理。如果这个代理与您的页面不在同一个原始位置,它可以返回Access-Control-Allow-Origin标头。

而不是将API请求发送到某个远程服务器,您将向您的代理发送请求,将其转发给远程服务器。这里有几个代理选项。

第三选择:JSONP(需服务器支持)

如果CORS和代理服务器不为你工作,JSONP可能会有帮助。你基本上是做一个回调参数的GET请求:

(获得)http://api.example.com/endpoint?callback=foo 服务器将包装在一个函数调用中的JSON回复您的回调,在那里你可以处理它:

富({“你“:”json“,here:true}) 有一些缺点,特别是JSONP仅支持GET请求,并且您仍然需要协作服务器。从GitHub

+0

我的服务器是vNext .net核心应用程序。我把属性方法(ActionFilterAttribute)重写OnActionExecuting并在所有请求之前执行。当我做GET请求时,它执行正确,但是当POST方法不起作用。 –