C# 返回错误而不是响应odata.net

C# 返回错误而不是响应odata.net,c#,.net,odata,C#,.net,Odata,我刚接触Odata,一直在使用.net(c#)和本视频编写api 问题是我有这样的构造函数方法: [EnableQuery] public ObjectResult<InclusionWorkBookResult> GetInclusionWorkBooks() { string query = this.Url.Request.RequestUri.Query; if (string.IsNullOrEmpty(que

我刚接触Odata,一直在使用.net(c#)和本视频编写api

问题是我有这样的构造函数方法:

        [EnableQuery]
    public ObjectResult<InclusionWorkBookResult> GetInclusionWorkBooks()
    {
        string query = this.Url.Request.RequestUri.Query;
        if (string.IsNullOrEmpty(query))
        {
            return Request.CreateErrorResponse(HttpStatusCode.Forbidden, "");
        }
        return db.GetInclusionWorkBookData();
    }
[启用查询]
public ObjectResult GetInclusion工作簿()
{
字符串查询=this.Url.Request.RequestUri.query;
if(string.IsNullOrEmpty(查询))
{
返回请求.CreateErrorResponse(HttpStatusCode.Forbidden,“”);
}
返回db.GetInclusionWorkBookData();
}
正如您可以看到的那样,如果用户没有指定查询,它将返回一个禁止的错误代码(这将迫使他们进行筛选,因为完整的数据集有数百万行)。 但是,这不起作用,因为Request.createErrorResponse是HttpResponseMessage,get返回ObjectResult

我知道在查询odata时可能会出现一个禁止的错误(弄乱url查询)

我的问题是: 如何返回自定义错误消息而不弄乱GET的返回标题


提前谢谢。

您可以返回IHttpActionResult,例如:

public IHttpActionResult GetInclusionWorkBooks()
{
    string query = this.Url.Request.RequestUri.Query;
    if (string.IsNullOrEmpty(query))
    {
        return BadRequest();
    }
    return Ok(db.GetInclusionWorkBookData());
}

如果提供了查询,结果将是200(确定)和请求的数据,否则将是400个错误请求

Hi jps,感谢您的快速回答。我已经想到了这一点,但它不起作用,因为Odata请求需要ObjectResult。因此,当我将其更改为返回IhttpActionResult时,只要我能在代码中跟踪它,一切都正常(即使返回运行),但在响应中,我得到了406(不可接受)消息。我已经确保更改了WebApi.Config.cs中的类型:“builder.EntitySet(“InclusionWorkBooks”);”这是因为odata函数实际上查询get方法并将响应作为Json发送回。嗨,WepApi.Config中的更改实际上是错误的。不要将其更改为IHttpActionResult。您的实体集仍然是InclusionWorkBookResult。您只需要更改我在回答中提到的Get方法。如果您尝试使用fiddler之类的工具,您将看到您的数据是JSON格式的,状态为OK,或者是空的正文和状态为BadRequest。这就是解决方案,谢谢