2012-12-16 7 views
5

私はMVC4プロジェクトを持っていますが、私は/ QRCode/address/amountのような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) 
    { 
     ... 

問題がある:

URLがある場合は:QRCode/address1/33、すべてが正常に動作しますが、そこにある場合QRCode/address1/33.33のような第2パラメータのドット、「HTTPエラー404.0 - 見つかりません」が表示されています。

第2パラメータの文字列を再宣言すると、同じ結果が得られます。

ここで何が起こっているか

誰もが知っているドット利回り同じ結果の代わりに%2Eを使用していますか?私はそれがMVC3で正常に動作したことを知っています

+1

"dots"は通常、ファイルをMIMEタイプにマップしてからハンドラにマップするためにIISをトリガします。したがって、おそらくIISは.33ハンドラを探していますが、もちろん存在しません。あなたのweb.configは、パイプラインを通じてすべてのリクエストを実行するように設定されていますか? – vcsjones

+0

私はハンドラマッピングを調べるでしょう。 – Baz1nga

答えて

7

うまく働い:

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

私はテストしましたが、それは本当にトリックを行います。どうやら、MVCバージョンではなくランタイムであった。私のhttpRuntimeタグはtargetFramework = "4.5"でしたが、これが原因です。 relaxedUrlToFileSystemMappingはそれを修正しました。 – galets

6

はい...コメントを参照してください、ハンドラマッピングが問題でした。

私は33.33/QRコード/アドレス1にQRコード/アドレス1/33.33からURLを変更/マッピングは、これがIIS 7上にある場合、その後、あなたの設定ファイルに以下を追加し、それが正常に動作する必要があり

0

はここで別のオプションです:量をマップが、名前のURLパラメータとして渡していない:

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

は今、このようなURLでAPIを呼び出します。

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