War*_* P 33 c# asp.net asp.net-core-mvc
我发现了一篇博文,展示了如何将熟悉的东西(如HttpResponseMessage)"重新填充"回ASP.NET Core MVC,但我想知道在REST Post方法中使用以下代码执行相同操作的新本机方法是什么.控制器:
// POST audit/values
[HttpPost]
public System.Net.Http.HttpResponseMessage Post([FromBody]string value)
{
var NewEntity = _repository.InsertFromString(value);
var msg = new System.Net.Http.HttpResponseMessage(System.Net.HttpStatusCode.Created);
msg.Headers.Location = new Uri(Request.RequestUri + NewEntity.ID.ToString());
return msg;
}
Run Code Online (Sandbox Code Playgroud)
在ASP.NET Core MVC项目中,我似乎无法获得Request.RequestUri.
我尝试检查Request,我能够创建这样的函数:
private string UriStr(HttpRequest Request)
{
return Request.Scheme + "://" + Request.Host + Request.Path; // Request.Path has leading /
}
Run Code Online (Sandbox Code Playgroud)
所以我可以改写UriStr(Request).但我不确定这是对的.我觉得我正在乱砍,并没有正确使用它.
早期非核心ASP.NET MVC版本的相关问题询问如何获取站点的基本URL.
t.o*_*vre 62
就个人而言,我使用:
new Uri(request.GetDisplayUrl())
Run Code Online (Sandbox Code Playgroud)
GetDisplayUrl是以下命名空间中的扩展方法:Microsoft.AspNetCore.Http.Extensions
Tho*_*que 18
更简洁的方法是使用UriBuilder:
private static Uri GetUri(HttpRequest request)
{
var builder = new UriBuilder();
builder.Scheme = request.Scheme;
builder.Host = request.Host.Value;
builder.Path = request.Path;
builder.Query = request.QueryString.ToUriComponent();
return builder.Uri;
}
Run Code Online (Sandbox Code Playgroud)
(未经测试,代码可能需要一些调整)
Dea*_*ane 12
这是一个有效的代码.这是基于@Thomas Levesque的答案,当请求来自自定义端口时,该答案无效.
public static class HttpRequestExtensions
{
public static Uri ToUri(this HttpRequest request)
{
var hostComponents = request.Host.ToUriComponent().Split(':');
var builder = new UriBuilder
{
Scheme = request.Scheme,
Host = hostComponents[0],
Path = request.Path,
Query = request.QueryString.ToUriComponent()
};
if (hostComponents.Length == 2)
{
builder.Port = Convert.ToInt32(hostComponents[1]);
}
return builder.Uri;
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
24607 次 |
| 最近记录: |