2012-10-11 78 views
0

我有一個網站收集URL。完整的HTTP URL被輸入到文本框中。當參數中傳遞一個URL時,我得到一個400錯誤。它可以正常工作。在參數MVC中傳遞URL 4

使用jQuery,我如何在應用程序中傳遞完整的URL?

MVC路由配置:

routes.MapRoute("UploadLinks", "media/upload_links/{link}/{albumID}", 
         new { controller = "Media", action = "WebLinkUpload" }); 

控制器動作:

public ActionResult WebLinkUpload(string link, string albumID){} 

jQuery的AJAX調用:

$('#btnUploadWebUpload').click(function() { 
     $.ajax({ 
      type: "GET", 
      url: "/media/upload_links/" + encodeURIComponent($('#txtWebUrl').val().trim()) + "/" + currentAlbumID, 
      contentType: "application/json; charset=utf-8", 
      dataType: "json", 
      success: function (result) { 

      } 
     }); 
    }); 

回答

2

URL的路徑部分不允許使用某些字符。這裏有一個nice article,Scott Hanselman給出了更多細節。我建議你傳遞link作爲查詢字符串參數,而不是作爲路線的一部分:

routes.MapRoute(
    "UploadLinks", 
    "media/upload_links/{albumID}", 
    new { controller = "Media", action = "WebLinkUpload" } 
); 

然後:

$('#btnUploadWebUpload').click(function() { 
    $.ajax({ 
     type: 'GET', 
     url: '/media/upload_links/' + currentAlbumID, 
     data: { link: $('#txtWebUrl').val().trim() }, 
     success: function (result) { 

     } 
    }); 
}); 

還要注意,我已刪除從AJAX調用這是contentType: 'application/json'錯誤。您沒有發送任何JSON請求。這是一個GET請求。

+0

但是他對URI進行了編碼... – mpen

+1

'encodeURIComponent'必須用於對查詢字符串參數值進行編碼,而不是對路徑的某些部分進行編碼。所以不,他沒有編碼。不管你如何編碼它,Web服務器都不會允許你在url中使用一些特殊字符。 –

+0

非常感謝Darin,這真的有幫助。 – user516883

0

確保您的地圖路由呼叫在默認值之前。如果沒有,它會嘗試使用upload_links操作調用媒體控制器。