【问题标题】:How to generate a URL for ASP.NET MVC action, including hostname and port? [duplicate]如何为 ASP.NET MVC 操作生成 URL,包括主机名和端口? [复制]
【发布时间】:2013-08-31 20:56:54
【问题描述】:

我目前的要求是:

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

我想在asp.net视图层显示一个动作url,url是这样的(完整的url,包括http://protocol + hostname + 端口 + controllerName + actionName):

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

【问题讨论】:

  • 试试 urlhelper url.Action("ViewAction", "MyModelController", new { id = this.ID });
  • 如果您的路由首先匹配默认路由(没有控制器和操作值),您应该排除路由上的默认参数或在默认值之前为此场景创建新路由。

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


【解决方案1】:

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 }))
{
}

【讨论】:

  • Html.BeginForm() 有覆盖方法,可以保存以上 4 项,例如协议、主机名等。无论如何它工作正常,谢谢。
【解决方案2】:

除了默认路由:

        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>

【讨论】:

  • 这真的是我应该做的。好像端口不能这样进入url?!
  • 不同的端口意味着您要链接到另一个应用程序。在这种情况下,应用程序如何知道如何将动作和控制器匹配到适当的路由?与在 http 或 https 中运行 相同 应用程序相比,使用不同端口的 Url.Action 没有用处
  • 没关系,更新了答案,告诉你如何获取绝对网址。
  • ok,部署后站点会隐藏端口对吧?谢谢巴特
  • 是的,保罗。如果网站在默认网络端口 (80) 上,则不会显示。
猜你喜欢
  • 1970-01-01
  • 2015-02-08
  • 1970-01-01
  • 2016-04-12
  • 1970-01-01
  • 2010-09-07
  • 1970-01-01
  • 1970-01-01
  • 2017-11-21
相关资源
最近更新 更多