假设我有这样的路线:
[Route("/users/{Id}", "DELETE")]
public class DeleteUser
{
public Guid Id { get; set; }
}
如果我将CORS与自定义标头一起使用,则会发出OPTIONS预检请求。这将发生在所有请求上。使用上述路由,路由将触发,但OPTIONS将为404,并且将触发ajax错误处理程序。
我可以将路线修改为[Route("/users/{Id}", "DELETE OPTIONS")]
,但我需要在我的每条路线上执行此操作。有没有办法全局允许所有自定义路线的OPTIONS?
由于当RequestFilter
允许OPTIONS时看起来这种行为不正确,我暂时使用了一个Subclassed属性,它只是自动为动词添加OPTIONS
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = true, Inherited = true)]
public class ServiceRoute : RouteAttribute
{
public ServiceRoute(string path) : base(path) {}
public ServiceRoute(string path, string verbs)
: base(path, string.Format("{0} OPTIONS", verbs)) {}
}
答案 0 :(得分:1)
如此earlier answer所示,您可以通过添加CorsFeature插件为所有选项请求添加全局启用CORS:
Plugins.Add(new CorsFeature()); //Registers global CORS Headers
如果您愿意,可以直接添加PreRequest过滤器以发出所有全局标头(例如在CorsFeature中注册)并使用以下命令将所有 OPTIONS 请求短路:
this.RequestFilters.Add((httpReq, httpRes, requestDto) => {
//Handles Request and closes Responses after emitting global HTTP Headers
if (httpReq.Method == "OPTIONS")
httpRes.EndServiceStackRequest();
});