Asp.net mvc 在参数MVC4中传递URL

Asp.net mvc 在参数MVC4中传递URL,asp.net-mvc,jquery,Asp.net Mvc,Jquery,我有一个收集URL的网站。在文本框中输入完整的HTTP URL。在参数中传递URL时,出现400错误。它适用于常规文本 使用jQuery,如何在应用程序中传递完整的URL MVC路由配置: routes.MapRoute("UploadLinks", "media/upload_links/{link}/{albumID}", new { controller = "Media", action = "WebLinkUpload" }); pu

我有一个收集URL的网站。在文本框中输入完整的HTTP URL。在参数中传递URL时,出现400错误。它适用于常规文本

使用jQuery,如何在应用程序中传递完整的URL

MVC路由配置:

 routes.MapRoute("UploadLinks", "media/upload_links/{link}/{albumID}",
                       new { controller = "Media", action = "WebLinkUpload" });
 public ActionResult WebLinkUpload(string link, string albumID){}
$('#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) {

            }
        });
    });
控制器操作:

 routes.MapRoute("UploadLinks", "media/upload_links/{link}/{albumID}",
                       new { controller = "Media", action = "WebLinkUpload" });
 public ActionResult WebLinkUpload(string link, string albumID){}
$('#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) {

            }
        });
    });
jQuery AJAX调用:

 routes.MapRoute("UploadLinks", "media/upload_links/{link}/{albumID}",
                       new { controller = "Media", action = "WebLinkUpload" });
 public ActionResult WebLinkUpload(string link, string albumID){}
$('#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) {

            }
        });
    });

url的路径部分不允许使用某些字符。下面是一篇斯科特·汉斯曼(Scott Hanselman)提供更多细节的文章。我建议您将
链接作为查询字符串参数传递,而不是作为路由的一部分传递:

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请求。

确保地图路由调用在默认值之前。如果没有,它将尝试使用上载链接操作调用媒体控制器。

encodeURIComponent
必须用于编码查询字符串参数值,而不是路径的一部分。所以不,他没有编码。无论您如何编码,web服务器都不允许您在url中使用某些特殊字符。谢谢Darin,这真的很有帮助。