【问题标题】:Get absolute URL inside Web API Controller?在 Web API 控制器中获取绝对 URL?
【发布时间】:2021-04-08 06:46:59
【问题描述】:

在我的控制器中,我不能使用 CreatedAtAction,原因超出了这个问题的范围。 因此我需要执行以下操作,但是我不知道如何获取 Web API 的绝对 URL 以正确设置 Location 标头?

public async Task<ActionResult<string>> PostItem(ItemPostRequest itemPostRequest)
{
    // call repository etc.

    string baseUrl= // <------- how to get this?
    Response.Headers.Add("Location", baseUrl + insertId);

    return Content(savedItem, "application/json", System.Text.Encoding.UTF8);
}

我使用的是 .NET 5.0,以防万一。

【问题讨论】:

    标签: c# rest asp.net-core asp.net-core-webapi .net-5


    【解决方案1】:

    Stefan,由于代表率低,我无法添加评论,所以在您寻找关于尾随斜杠的更舒适解决方案时,添加 Prasad 的答案 - 这就是我使用的:

    using System;
    using Microsoft.AspNetCore.Authorization;
    using Microsoft.AspNetCore.Mvc;
    
    namespace GeddesCapital.Blas.Api.Controllers
    {
        public abstract class BaseControllerInheritedByAllMyControllers : ControllerBase
        {
            protected string BaseUrl => $"{Request.Scheme}://{Request.Host.Value}";
    
            protected string EndpointUrl => $"{BaseUrl}/{Request.Path.ToString().Trim('/')}";
        }
        
        [Route("api/v1/[controller]")]
        public class TestController : BaseControllerInheritedByAllMyControllers
        {
            [HttpPost("named-test-endpoint")]
            [AllowAnonymous]
            public ActionResult SomeTestEndpoint()
            {
                const string trailingUrl = "/api/v1/Test/named-test-endpoint";
                
                var absoluteUrl1 = $"{BaseUrl}{trailingUrl}";
                var absoluteUrl2 = $"{EndpointUrl}";
    
                Console.WriteLine($"The two paths match each other: {absoluteUrl1 == absoluteUrl2}");
    
                return Ok();
            }
        }
    }
    

    【讨论】:

      【解决方案2】:
      string baseUrl = $"{Request.Scheme}://{Request.Host.Value}/{Request.Path}";
      

      【讨论】:

      • 谢谢,第一次测试后看起来很有希望。请注意,Request.Path 可以包含尾部斜杠。想知道是否必须手动检查或有更舒适的解决方案
      猜你喜欢
      • 2013-11-20
      • 2021-07-30
      • 1970-01-01
      • 1970-01-01
      • 2016-07-29
      • 1970-01-01
      • 1970-01-01
      • 2019-06-27
      • 1970-01-01
      相关资源
      最近更新 更多