2011-02-05 61 views
1

我有一個這樣的動作:自定義參數處理MVC

public JsonResult Action(String deviceId, Guid clientId) 

因此,根據URL(包括參數)會像

www.site/ControllerName/Action?deviceId= 123 &的clientId = {some_guid}

沒有祕密,即,如果它是不可能解析{some_guid}爲的Guid類型,asp.net會產生錯誤。 如果格式錯誤,我需要服務器返回特殊的JSON結果,消息如{「result」:「1」; 「評論」:「錯誤的網址。查看參數clientId」}。
如何在執行前檢查動作參數?

+0

是參數「的DeviceID」意味着只允許數字或字符? – ebb 2011-02-05 20:02:16

+0

這是簡單的字符串類型。在這種情況下,它包含字母,數字和' - '符號。 – 2011-02-05 21:04:54

+0

如果沒有更多信息,無法提供正確的答案。你已經寫了一條評論,回答你試圖返回一個JSON對象 - 你有更多的細節隱藏嗎? – ebb 2011-02-05 21:43:36

回答

2

我會保持你有什麼,但讓參數爲空的;

public ActionResult Action(String deviceId, Guid? clientId) 
{ 
    if (clientId.HasValue) 
    { 
     // Do something 
    } 
    else 
    { 
     throw new HttpException(404, "Url not found"); 
    } 
} 

我意識到這是幾乎相同以上,只有在這裏你能保持你的類型相同,您原來的職位只是檢查,看看是否值已經過去了

3

我想你的簽名改爲:

public ActionResult Action(String deviceId, string clientId) 

那麼你可以

Guid id; 
if (!Guid.TryParse(clientId, out id)) 
{ 
    // take appropiate action 
} 
0

你可能想使用模型綁定器爲,使Guid.TryParse檢查那裏。如果某個值有錯誤,您可以修改ModelState。

第二種方法是使用一些特殊的動作過濾器屬性,如與ASP.NET MVC捆綁在一起的HandleErrorAttribute。該過濾器可以捕獲特定類型的異常,並提供特定的錯誤處理工作流程和結果替換(可能這裏最好的想法是重定向到404,因爲「錯誤的Guid」只是「不存在的頁面」)。

0

我會怎麼做:

public ActionResult Action(int deviceId, string clientId) 
{ 
    Guid clientGuid; 

    if (!Guid.TryParse(clientId, out clientGuid)) 
    { 
     throw new HttpException(404, "Action not found"); 
    } 
    else 
    { 
     // Do some cool stuff.... 
    } 
}