Для тех, кто все еще ищет ответ, я решил это с помощью Angular 5 и HttpClient:
const formData = new FormData();
// append your data
formData.append('myKey1', 'some value 1');
formData.append('myKey1', 'some value 2');
formData.append('myKey3', true);
this.httpClient.post('apiPath', formData);
НЕ устанавливайте заголовок Content-Type, угловые исправят это для вас!
Предполагая, что у вас есть объект Request, вы можете использовать:
string.Format("{0}://{1}{2}", Request.Url.Scheme, Request.Url.Authority, Url.Content("~"));
Если он недоступен, вы можете перейти к нему через контекст:
var request = HttpContext.Current.Request
У вас может быть статический метод, который смотрит на HttpContext.Current и определяет, какой URL использовать (развитие или живой сервер) в зависимости от идентификатора хоста. HttpContext может предложить даже более простой способ сделать это, но это первый вариант, который я нашел, и он отлично работает.
Вы можете использовать следующий сценарий в поле зрения:
<script type="text/javascript">
var BASE_URL = '<%= ResolveUrl("~/") %>';
</script>
Для абсолютного базового URL используйте это. Работает как с HTTP, так и с HTTPS.
new Uri(Request.Url, Url.Content("~"))
Возможно, это расширение или модификация ответов, размещенных здесь, но я использую просто следующую строку, и она работает:
Request.Url.GetLeftPart(UriPartial.Authority) + Url.Content("~")
Когда мой путь: http://host/iis_foldername/controller/action
, я получаю: http://host/iis_foldername/
Я положил это в голову моего _Layout.cshtml
<base href="~/" />
Для ASP.NET MVC 4 это немного отличается:
string url = HttpContext.Request.Url.AbsoluteUri;
На самой веб-странице:
<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, надеюсь, что это поможет
Для url с псевдонимом аппликации вроде http://example.com/appAlias/ ... Вы можете попробовать следующее:
var req = HttpContext.Current.Request;
string baseUrl = string.Format("{0}://{1}/{2}", req.Url.Scheme, req.Url.Authority, req.ApplicationPath);
В 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("~/");
}
}
<base>
. Также вы можете опустить схему таким образом, чтобы она работала с http или https. Это означает, что вы можете запустить url с помощью //
.
– Jess
9 December 2016 в 20:01
Возможно, это лучшее решение.
@{
var baseUrl = @Request.Host("/");
}
с использованием
<a href="@baseUrl" class="link"Base URL</a>
Это работает в ASP.NET MVC 4 В любом действии контроллера вы можете написать: 1stline получает весь url + Query String. 2-я строка удаляет локальный путь и amp; запрос, последний символ '/'. Третья строка добавляет символ «/» в последнюю позицию.
Uri url = System.Web.HttpContext.Current.Request.Url;
string UrlLink = url.OriginalString.Replace(url.PathAndQuery,"");
UrlLink = String.Concat(UrlLink,"/" );
В коде:
Url.Content("~/");
MVC3 Razor Синтаксис:
@Url.Content("~/")
Url
сразу с места в карьер? Может быть, только в Controller
. Конечно, не в ViewModel
или в любом другом class
, где вам может понадобиться это.
– Serj Sagan
12 August 2016 в 23:31
Следующий фрагмент работает для меня в MVC4 и не нуждается в HttpContext
:
System.Web.HttpRuntime.AppDomainAppVirtualPath
jQuery.load()
для создания URL-адреса контроллера и действия, которое я хочу вызвать: $('#myplaceholder').load('@(Html.Raw(HttpRuntime.AppDomainAppVirtualPath))/MyController/MyAction', ...);
– Kjell Rilbe
19 October 2012 в 10:17
Это преобразование свойства 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)
Для MVC 4:
String.Format("{0}://{1}{2}", Url.Request.RequestUri.Scheme, Url.Request.RequestUri.Authority, ControllerContext.Configuration.VirtualPathRoot);
в простых html и ASP.NET или ASP.NET MVC, если вы используете тег:
<a href="~/#about">About us</a>
Поэтому ни один из перечисленных здесь не работал для меня, но, используя несколько ответов, я получил что-то:
public string GetBaseUrl()
{
var request = HttpContext.Current.Request;
var appUrl = HttpRuntime.AppDomainAppVirtualPath;
if (appUrl != "/")
appUrl = "/" + appUrl;
var baseUrl = string.Format("{0}://{1}{2}", request.Url.Scheme, request.Url.Authority, appUrl);
return baseUrl;
}
Обновление для ASP.NET Core / MVC 6:
ASP.NET Core
делает этот процесс немного более болезненным, особенно если вы глубоко в своем коде. У вас есть 2 варианта доступа к HttpContext
1) Передайте его с вашего controller
:
var model = new MyClass(HttpContext);
, затем в model
:
private HttpContext currentContext;
public MyClass(HttpContext currentContext)
{
this.currentContext = currentContext;
}
2) Возможно, более чистый способ заключается в том, чтобы вводить его в ваш класс, который начинается с регистрации типов в вашем Startup:
public void ConfigureServices(IServiceCollection services)
{
// Add framework services.
services.AddMvc();
services.AddTransient<MyClass, MyClass>();
services.TryAddSingleton<IHttpContextAccessor, HttpContextAccessor>();
}
, после чего он вводится для вас следующим образом:
private HttpContext currentContext;
public MyClass(IHttpContextAccessor httpContextAccessor)
{
currentContext = httpContextAccessor.HttpContext;
}
в любом случае, здесь обновлено для .NET Core
GetBaseUrl()
:
public string GetBaseUrl()
{
var request = currentContext.Request;
var host = request.Host.ToUriComponent();
var pathBase = request.PathBase.ToUriComponent();
return $"{request.Scheme}://{host}{pathBase}";
}
Helpers
в базе моего приложения, у меня есть класс static
, называемый Statics
, и я помещаю функции, подобные выше ... просто убедитесь, что вы изменили приведенное выше с public string GetBaseUrl()
до public static string GetBaseUrl()
– Serj Sagan
28 May 2013 в 18:02
Statics
, вместо этого я его разломал на более конкретные виды использования, поэтому в этом случае это пойдет в мой класс UrlHelper
– Serj Sagan
14 August 2016 в 22:29
Host.ToUriComponent()
, наконец, и мне удалось получить объект запроса с Url.ActionContext.HttpContext
– mkb
10 March 2018 в 22:26
Это отлично работает для меня (также с балансировкой нагрузки):
@{
var urlHelper = new UrlHelper(Html.ViewContext.RequestContext);
var baseurl = urlHelper.Content(“~”);
}
<script>
var base_url = "@baseurl";
</script>
Особенно, если вы используете нестандартные номера портов, используя Request.Url.Authority, похоже, , но сбой в среде LB.
Трюк с использованием IIS заключается в том, что привязки IIS могут отличаться от ваших общедоступных URL-адресов (WCF, которые я смотрю на вас), особенно с многопользовательскими машинами. Я склонен привязывать вектор к использованию конфигурации для явного определения «базового» URL-адреса для внешних целей, поскольку это имеет тенденцию быть немного более успешным, чем извлечение его из объекта Request.
urlHelper.Content("~")
? Как создать defineurlHelper
? Благодаря! – Maxim Zaslavsky 15 August 2010 в 08:38var request = HttpContext.Current.Request; urlBase = string.Format("{0}://{1}{2}", request.Url.Scheme, request.Url.Authority, (new System.Web.Mvc.UrlHelper(request.RequestContext)).Content("~"));
– Peter 28 November 2011 в 12:21ControllerContext.RequestContext.HttpContext.Request
– row1 12 October 2012 в 03:10