如何为ASP.NET MVC操作生成URL,包括主机名和端口?

时间:2013-08-31 20:56:54

标签: asp.net asp.net-mvc asp.net-mvc-3 asp.net-mvc-4

我目前的要求是:

  

http://www.mofeng.com:4355/

我希望在asp.net视图层中显示一个动作网址,网址就像这样(完整网址,包括 http://协议 + 主机名 + 端口 + controllerName + actionName ):

  

http://www.mofeng.com:4355/controllerX/actionY

2 个答案:

答案 0 :(得分:33)

enter image description here

Url.Action("Action", "Controller", null, Request.Url.Scheme);

如何在“表单操作”属性中包含以下内容?

  

<强> 1。协议(http://或https://)
  的 2。主机名
  第3。查询字符串
  的 4。端口

@{
    var actionURL = Url.Action("Action", "Controller", 
                               FormMethod.Post, Request.Url.Scheme)  
                    + Request.Url.PathAndQuery;
}
@using (Html.BeginForm("Action", "Controller", FormMethod.Post, 
                                                   new { @action = actionURL }))
{
}

答案 1 :(得分:4)

除了默认路线:

        routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Application", action = "Index", id = UrlParameter.Optional }
        );

您可能需要实施一个新的:

        routes.MapRoute(
            name: "ControllerXActionYRoute",
            url: "controllerX/actionY",
            defaults: new { controller = "controllerX", action = "actionY" }
        );

然后你可以使用:

<div>@Url.Action("Action", "Controller", null, Request.Url.Scheme);</div>

* 编辑:*

要获得完整的网址,你必须绝对。

<div>VirtualPathUtility.ToAbsolute(@Url.Action("Action", "Controller"));</div>