[英]WebAPI custom route gives 404
在此webAPI控制器中,Action PSWS
返回404。它早先運行良好,但現在顯示404。除了很少有與不同實體相關的控制器以外,代碼沒有任何改變。 調試器什么也沒有捕獲,也沒有在斷點處停止,我已經嘗試了所有知識或資源,嘗試為什么它顯示404,但是沒有任何效果。
我正在通過以下網址訪問此操作
http://localhost:43827/api/Pss/PSWS/cs/b3dc86d8-9b55-4c7e-95f3-7bab0908510d/ps/1eaaaa5e-dd32-4d29-9b85-16c1eb7890f4/pss/6af508be-c2ca-4d00-aeb4-dd87cabf72d4/quantity/4/SerialPrefix/FP_P/StartFrom/21-11-2017/Expires/21-11-2019
任何幫助或指針將不勝感激:)
namespace API.Controllers
{
[RoutePrefix("api/Pss")]
public class myEntityController : ApiController
{
private localEntities db = new localEntities();
[HttpGet]
[Route("")]
// GET: api/myEntity
public async Task<IHttpActionResult> GetmyEntity(){ return OK("OK")}
[HttpGet]
[Route("{keys:guid}")]
// GET: api/myEntity/1f7dc74f-af14-428d-aa31-147628e965b2
[ResponseType(typeof(myEntity))]
public async Task<IHttpActionResult> GetmyEntity(Guid keys){ return OK("OK")}
// PUT: api/myEntity/1f7dc74f-af14-428d-aa31-147628e965b2
[HttpPut]
[Route("{keys:guid}", Name = "PutmyEntity")]
[ResponseType(typeof(void))]
public async Task<IHttpActionResult> PutmyEntity(Guid keys){ return OK("OK")}
// POST: api/myEntity
[HttpPost]
[Route("", Name = "PostmyEntity")]
[ResponseType(typeof(myEntity))]
public async Task<IHttpActionResult> PostmyEntity(Guid keys,myEntity entity){ return OK("OK")}
[HttpGet]
[Route("psws/cs/{cpKeys:guid}/ps/{prkKeys:guid}/pss/{prkSKeys:guid}/quantity/{quantity:int}/SerialPrefix/{_SerialPrefix:length(3,20)}/StartFrom/{start:DateTime}/Expires/{end:DateTime}"]
[ResponseType(typeof(JObject))]
public IHttpActionResult PSWS(Guid cpKeys, Guid prkKeys, Guid prkSKeys, int quantity, string _SerialPrefix, DateTime start, DateTime end)
{
return Ok("kill");
}
}
}
在“ 路由約束參考”中參考以下文檔
警告
避免使用約束進行輸入驗證,因為這樣做意味着無效輸入將導致404(未找到),而不是帶有適當錯誤消息的400 。 路線約束應用於消除相似路線之間的歧義,而不是驗證特定路線的輸入。
話雖如此,並且除非參數{start:DateTime}/Expires/{end:DateTime}
是一個錯字,否則基於這些參數的約束條件可能會不正確,具體取決於它們應為{start:datetime}/Expires/{end:datetime}
。
接下來,示例URL具有無效的不變區域性日期。
警告
驗證URL可以轉換為CLR類型(例如
int
或DateTime
)的路由約束始終使用不變的區域性 -它們假定URL不可本地化。 框架提供的路由約束不會修改存儲在路由值中的值。 從URL解析的所有路由值都將存儲為字符串。 例如,浮動路線約束將嘗試將路線值轉換為浮動值,但是轉換后的值僅用於驗證其是否可以轉換為浮動值。
也就是說,基於約束的預期日期應遵循以下不變的文化格式,例如yyyy-MM-dd
或yyyy-MM-dd h:mmtt
。
意思是
...StartFrom/21-11-2017/Expires/21-11-2019
應該是
...StartFrom/2017-11-21/Expires/2019-11-21
您的方法和URL在語法上是正確的。 StartFrom和Expires的DateTime參數的值可能錯誤,導致404。
DateTime解析將取決於系統配置dd / mm / yyyy與mm / dd / yyyy等。
為了進行驗證,請將您的網址更改為有效范圍內的月份和日期可以互換的日期(例如1-1-2017),或者甚至更好地將參數的類型更改為字符串,並根據您的期望控制代碼中的解析成為。 DateTime.Parse( “DD / MM / YYYY”)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.