【发布时间】:2016-02-20 02:58:28
【问题描述】:
我有一个使用 CorsFeature 的服务设置,并且正在使用 myz 在其他答案中建议的方法,收集在 appHost 文件中使用的函数中:
private void ConfigureCors(Funq.Container container)
{
Plugins.Add(new CorsFeature(allowedOrigins: "*",
allowedMethods: "GET, POST, PUT, DELETE, OPTIONS",
allowedHeaders: "Content-Type, Authorization, Accept",
allowCredentials: true));
PreRequestFilters.Add((httpReq, httpRes) =>
{
//Handles Request and closes Responses after emitting global HTTP Headers
if (httpReq.HttpMethod == "OPTIONS")
{
httpRes.EndRequest();
}
});
}
但是,预请求过滤器仅在某些服务请求上触发。我们在服务中拥有的基础实体之一是问题实体,自定义路由定义如下:
[Route("/question")]
[Route("/question/{ReviewQuestionId}", "GET,DELETE")]
[Route("/question/{ReviewQuestionId}/{ReviewSectionId}", "GET")]
使用 POSTMAN 触发测试查询(全部使用 OPTIONS 动词),我们可以看到这将触发预请求过滤器:
http://localhost/myservice/api/question/
但这不会:
http://localhost/myservice/api/question/66
大概是因为第二条和第三条路由明确定义了它们接受的动词,而 OPTIONS 不是其中之一。
真的有必要在每个定义的限制支持的动词的路由中拼出 OPTIONS 吗?
【问题讨论】:
-
我认为是的,有必要在每个 Route "GET,OPTIONS" 中都有 OPTIONS(至少,没有必要为 options 或 any 创建函数)我的代码是 this跨度>
-
在使用这个太久之后,stefan2410——这对我有用。我只需要在我的 appHost.Configure 方法中添加 CorsFeature 插件,将我的路由更改为“GET,OPTIONS”和“POST,OPTIONS”,然后创建一个“public void Options(Requestar request){}”以使其正常工作。有点噩梦,但这就是你不为(我肯定很棒)v4支付神话的结果:)。
标签: servicestack