簡體   English   中英

WebAPI自定義路由給出404

[英]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類型(例如intDateTime )的路由約束始終使用不變的區域性 -它們假定URL不可本地化。 框架提供的路由約束不會修改存儲在路由值中的值。 從URL解析的所有路由值都將存儲為字符串。 例如,浮動路線約束將嘗試將路線值轉換為浮動值,但是轉換后的值僅用於驗證其是否可以轉換為浮動值。

也就是說,基於約束的預期日期應遵循以下不變的文化格式,例如yyyy-MM-ddyyyy-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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM