2012-12-16 47 views
5

我有一個MVC4項目,我試圖讓它處理/ QRCode /地址/金額等URL。下面是它是如何宣稱:MVC4項目 - 參數值中不能有點?

路線:

routes.MapRoute(
    name: "QRCode", 
    url: "QRCode/{address}/{amount}", 
    defaults: new { controller = "QRCode", action = "Index" } 
); 

控制器:

public class QRCodeController : Controller 
{ 
    public ActionResult Index(string address, double amount) 
    { 
     ... 

的問題是:

當網址是:QRCode/address1/33,一切工作正常,但如果有第二個參數中的一個點,例如:QRCode/address1/33.33,我得到一個「HTTP錯誤404.0 - 未找到」。

重新聲明第二個參數字符串會得到相同的結果。

代替點收益率相同的結果

任何人都知道是怎麼回事,使用%2E?我知道它在MVC3中工作正常

+1

「dots」通常會觸發IIS嘗試將文件映射到MIME類型,然後映射到處理程序。所以IIS可能正在尋找一個.33處理程序,這當然不存在。您的web.config配置爲通過管道運行所有請求嗎? – vcsjones

+0

我會檢查處理程序映射.. – Baz1nga

回答

7

,如果這是在IIS 7,然後添加到您的配置文件,它應該很好地工作:

<system.web> 
    <httpRuntime relaxedUrlToFileSystemMapping="true" /> 
</system.web> 
+0

我測試過了,它的確有訣竅。顯然,改變的不是MVC版本,而是運行時。我的httpRuntime標記有targetFramework =「4.5」,這是造成這個問題的原因。 relaxedUrlToFileSystemMapping修復了它。 – galets

6

是......看到註釋,處理程序映射是一個問題。

我改變URL從QR碼/地址1/33.33到QR碼/地址1/33.33 /測繪工作的罰款

0

這裏的另一種選擇:不映射量,但它傳遞的URL參數名稱爲:

routes.MapRoute(
    name: "QRCode", 
    url: "QRCode/{address}", 
    defaults: new { controller = "QRCode", action = "Index" } 
); 

現在調用API與這樣的網址:

http://<server>/QRCode/address1?amount=33.33