问题描述
我找到了一个 博客文章 展示了如何将熟悉的东西(如 HttpResponseMessage)填充"回 ASP.NET Core MVC,但我想知道与以下代码执行相同操作的新本地方法是什么在控制器中的 REST Post 方法中:
I found a blog post that shows how to "shim" familiar things like HttpResponseMessage back into ASP.NET Core MVC, but I want to know what's the new native way to do the same thing as the following code in a REST Post method in a Controller:
// 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;
}
在 ASP.NET Core MVC 项目中,我似乎无法获取 Request.RequestUri.
In an ASP.NET Core MVC project, I can't seem to get Request.RequestUri.
我尝试检查请求,并且能够创建这样的函数:
I tried inspecting Request, and I was able to make a function like this:
private string UriStr(HttpRequest Request)
{
return Request.Scheme + "://" + Request.Host + Request.Path; // Request.Path has leading /
}
所以我可以改写 UriStr(Request)
.但我不确定这是否正确.我觉得我在乱用,并且没有正确使用它.
So I could write UriStr(Request)
instead. But I'm not sure that's right. I feel like I'm hacking my way around, and not using this correctly.
早期非核心 ASP 的相关问题.NET MVC 版本询问如何获取站点的基本 url.
A related question for earlier non-Core ASP.NET MVC versions asks how to get the base url of the site.
推荐答案
更简洁的方法是使用 UriBuilder
:
A cleaner way would be to use a 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;
}
(未测试,代码可能需要一些调整)
(not tested, the code might require a few adjustments)
这篇关于与 Request.RequestURI 等效的 ASP.NET Core MVC 是什么?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!