首先回答您的问题:是的,您可以自己公开 DataServiceVersion http 标头。这是自定义代码,而不是现有组件的设置。
将“过滤器”添加到您的全局 http 配置中。过滤器是从“System.Web.Http.Filters.ActionFilterAttribute”派生的类。
例如;
internal class DataServiceVersionHeaderFilterWebAPI : System.Web.Http.Filters.ActionFilterAttribute
{
public override void OnActionExecuted(HttpActionExecutedContext actionExecutedContext)
{
actionExecutedContext.Response.Content.Headers.Add("DataServiceVersion", "3.0");
actionExecutedContext.Response.Content.Headers.Add("Access-Control-Expose-Headers", "DataServiceVersion");
}
}
然后配置要使用的过滤器(在 global.asax 的应用程序启动中)
GlobalConfiguration.Configuration.Filters.Add( new DataServiceVersionHeaderFilterWebAPI() );
这将允许您从安全角度进行跨域 OData 查询。然而,这还有另一个问题;
OData 是一个比请求 URI 和 HTTP 标头更大的规范。它还指定了如何交换模型信息,而实际的数据交换是一个预定义的对象结构。简单,但仍然是预定义的结构。
object.d = 服务返回的内容
您必须自己实现规范的所有这些部分($filter、$metadata、$top、返回格式等)。
一些值得深思的食物。