2012-12-16 19 views
5

Mam projekt MVC4, i staram się, aby działał na adresach URL takich jak/QRCode/address/amount. Oto jak to jest zgodność:Projekt MVC4 - nie może mieć kropki w wartości parametru?

Trasa:

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

Kontroler:

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

Problemem jest:

Kiedy URL: QRCode/address1/33, wszystko działa dobrze, ale jeśli nie ma kropka w drugim parametrze, na przykład: QRCode/address1/33.33, otrzymuję komunikat "Błąd HTTP 404.0 - Nie znaleziono".

Ponowne ogłaszanie drugiego parametru ciąg daje ten sam wynik.

Korzystanie% 2E w miejsce kropki rentowności samego rezultatu

ktoś wie co tu się dzieje? Wiem, że działało poprawnie w MVC3

+1

"Kropki" zwykle wyzwalają IIS, aby spróbować zmapować plik do typu MIME, a następnie do programu obsługi. Tak więc IIS prawdopodobnie szuka sterownika .33, który oczywiście nie istnieje. Czy twój web.config jest skonfigurowany do uruchamiania wszystkich żądań przez potok? – vcsjones

+0

Sprawdzałbym mapowania programu obsługi .. – Baz1nga

Odpowiedz

7

jeśli jest to na IIS 7, a następnie dodać do pliku konfiguracyjnego i powinno działać prawidłowo:

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

Przetestowałem i to naprawdę wystarczy. Najwyraźniej zmieniło się nie wersja MVC, ale raczej środowisko wykonawcze. Mój tag httpRuntime miał targetFramework = "4.5", to właśnie spowodowało problem. relaxedUrlToFileSystemMapping naprawił to. – galets

6

Tak ... Zobacz komentarze, mapowanie obsługi było problemem.

Zmieniłem URL z QRCode/address1/33.33 do QRCode/Address1/33,33/i mapowanie działało dobrze

0

Oto kolejna opcja: nie zmapować ilość ale przekazać ją jako parametr URL z nazwą:

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

teraz nazywamy api z takim adresem URL:

http://<server>/QRCode/address1?amount=33.33 
Powiązane problemy