![](/img/trans.png)
[英]ASP.NET throwing 404 for large file and 400 for extremely large files
[英]Asp.NET Web API throwing 404 instead of 400
我已經使用ASP.NET Web API模板在.NET 4.5和Entity Framework 6中構建了服務。 當我向服務發出GET請求並忽略必需的參數時,它將返回404(未找到)而不是400(錯誤請求)。 我嘗試檢查所需的參數是否為空,但是甚至沒有到達方法中的代碼(請參見下面的代碼)。 我的問題是如何更改默認響應或使缺少必需參數的返回400。
[Route("item")]
[HttpGet]
public IHttpActionResult GetItem(string reqParam1, string reqParam2)
{
if (reqParam1 == null || reqParam2 == null)
throw new HttpResponseException(HttpStatusCode.BadRequest);
//remainder of code here
}
這是webAPI.config文件。 我認為我沒有修改默認設置。
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
// Web API configuration and services
// Web API routes
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
}
請注意:API不會訪問商品/電子產品/電視等信息,而更像商品,其中商品為綠色且為正方形,這些描述是必須傳入的-因此查詢類似於/item?color=green&shape=square
。
服務器返回404,因為它找不到您嘗試訪問的路由。 實際上,參數應該是路由的一部分,是否為可選參數: Route("items/{reqParam1}/{reqParam2}")
如果將它們定義為可選選項,則僅使用items
仍應調用路由,並且可以拋出BadRequest。 如果不是可選參數,則可能仍會拋出NotFound。
您還應該發布webApi配置,以便我們可以看到基本路由映射。
編輯采用以下路線示例:
config.Routes.MapHttpRoute(
name: "RunsWithParams",
routeTemplate: "api/{controller}/{project}/{skip}/{take}",
defaults: new { take = RouteParameter.Optional, skip = RouteParameter.Optional }
);
項目參數是強制性的,其余是可選的。 您可以只調用項目,也可以調用其余的,如果僅使用Optional之一,則拋出404,因為未定義路由。 這與使用裝飾器相同,因此它不能完全解決您的問題,但可以更好地說明路由。 不過,我看不出您為什么特別需要BadRequest。
另一個編輯:
要使用帖子末尾提到的請求url參數,您只需要使用[FromUri]裝飾器,請參閱此頁面以獲取更多詳細信息,並且下面是一個breef示例:
// POST api/files/{project}?target={target}
public HttpResponseMessage Post(string project, string target, [FromUri]string fname){...}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.