.net core iis部署




如何在ASP.NET MVC中获取我的webapp的基本URL? (14)

我如何快速确定我的ASP.NET MVC应用程序的根URL是什么? 也就是说,如果IIS设置为在http://example.com/foo/bar上为我的应用程序提供服务,那么我希望能够以可靠的方式获取该URL,而不涉及从当前URL请求并以某种脆弱的方式将其切碎,如果我重新布置我的动作,就会中断。

我需要基本URL的原因是,此Web应用程序调用另一个需要根用于调用者Web应用程序的回调用途。


这是一个asp.net属性到MVC的转换 。 这是一个几乎所有的歌唱都跳舞得到根网址的方法。

声明一个辅助类:

namespace MyTestProject.Helpers
{
    using System.Web;

    public static class PathHelper
    {
        public static string FullyQualifiedApplicationPath(HttpRequestBase httpRequestBase)
        {
            string appPath = string.Empty;

            if (httpRequestBase != null)
            {
                //Formatting the fully qualified website url/name
                appPath = string.Format("{0}://{1}{2}{3}",
                            httpRequestBase.Url.Scheme,
                            httpRequestBase.Url.Host,
                            httpRequestBase.Url.Port == 80 ? string.Empty : ":" + httpRequestBase.Url.Port,
                            httpRequestBase.ApplicationPath);
            }

            if (!appPath.EndsWith("/"))
            {
                appPath += "/";
            }

            return appPath;
        }
    }
}

用法:

从控制器使用:

PathHelper.FullyQualifiedApplicationPath(ControllerContext.RequestContext.HttpContext.Request)

在视图中使用:

@using MyTestProject.Helpers

PathHelper.FullyQualifiedApplicationPath(Request)

下面的代码片段在MVC4中对我很好,并且不需要HttpContext可用:

System.Web.HttpRuntime.AppDomainAppVirtualPath

也许这是在这里发布的答案的扩展或修改,但我只使用以下行,它的工作原理:

Request.Url.GetLeftPart(UriPartial.Authority) + Url.Content("~")

当我的路径是: http://host/iis_foldername/controller/action
那么我收到: http://host/iis_foldername/


你可以有一个静态方法来查看HttpContext.Current并根据主机ID决定使用哪个URL(开发或活动服务器)。 HttpContext甚至可以提供一些更简单的方法来完成它,但这是我找到的第一个选项,它工作正常。


假设你有一个Request对象可用,你可以使用:

string.Format("{0}://{1}{2}", Request.Url.Scheme, Request.Url.Authority, Url.Content("~"));

如果它不可用,您可以通过上下文获得它:

var request = HttpContext.Current.Request

在MVC _Layout.cshtml中:

<base href="@Request.GetBaseUrl()" />

那就是我们使用的!

public static class ExtensionMethods
{
public static string GetBaseUrl(this HttpRequestBase request)
        {
          if (request.Url == (Uri) null)
            return string.Empty;
          else
            return request.Url.Scheme + "://" + request.Url.Authority + VirtualPathUtility.ToAbsolute("~/");
        }
}

在简单的html和ASP.NET或ASP.NET MVC中,如果您使用的是标签:

<a href="~/#about">About us</a>

在网页上:

<input type="hidden" id="basePath" value="@string.Format("{0}://{1}{2}",
  HttpContext.Current.Request.Url.Scheme,
  HttpContext.Current.Request.Url.Authority,
  Url.Content("~"))" />

在javascript中:

function getReportFormGeneratorPath() {
  var formPath = $('#reportForm').attr('action');
  var newPath = $("#basePath").val() + formPath;
  return newPath;
}

这适用于我的MVC项目,希望它有帮助


对于MVC 4:

String.Format("{0}://{1}{2}", Url.Request.RequestUri.Scheme, Url.Request.RequestUri.Authority, ControllerContext.Configuration.VirtualPathRoot);

对于像http://example.com/appAlias/这样的应用别名的网址...您可以试试这个:

var req = HttpContext.Current.Request;
string baseUrl = string.Format("{0}://{1}/{2}", req.Url.Scheme, req.Url.Authority, req.ApplicationPath);

您可以在视图中使用以下脚本:

<script type="text/javascript">
    var BASE_URL = '<%= ResolveUrl("~/") %>';
</script>

我把它放在我的_Layout.cshtml的头部

 <base href="~/" />

这是在ASP .NET MVC 4中工作在任何控制器操作中,您都可以编写:1stline获取整个url +查询字符串。 第二行删除本地路径和查询,最后一个'/'符号。 第三行在最后位置添加'/'符号。

Uri url = System.Web.HttpContext.Current.Request.Url;
string UrlLink = url.OriginalString.Replace(url.PathAndQuery,"");
UrlLink = String.Concat(UrlLink,"/" );

这适用于我(也适用于负载平衡器):

@{
    var urlHelper = new UrlHelper(Html.ViewContext.RequestContext);
    var baseurl = urlHelper.Content(“~”);
}

<script>
    var base_url = "@baseurl";
</script>

特别是如果您使用的是非标准端口号,那么使用Request.Url.Authority首先看起来很不错,但在LB环境下会失败。







iis