我不知道如何在不进行硬编码的情况下从服务器数据构建服务器URL。
例如,对于下面的类,您可以在浏览器中使用以下URL访问方法GetLoginQRCode:http://localhost:5001/api/site
在方法GetLoginQRCode中,我想构建登录方法的URL。我不知道如何获取数据来构建类似http://localhost:5001/api/site/login
显然/login
可以被硬编码。但是我不想对http
或localhost
或路径api/site
进行硬编码。
[Route("api/[controller]")]
[ApiController]
public class SiteController : ControllerBase
{
[HttpGet]
public IActionResult GetLoginQRCode()
{
var thisServerloginUrl = "http://localhost:5001/api/dealer/login";
/*
what I would like is to programatically build the URL something like this
var thisServerloginUrl = [whatever I need here] + "/login"
*/
return Ok();
}
[HttpGet]
[Route("login")]
public IActionResult Login()
{
return Ok();
}
}
有没有一种方法可以通过服务器变量获取所有这些信息,而不必进行硬编码?
编辑:我没有将用户重定向到另一个URL。我将生成一个URL为QR Code数据的QR Code。调用方法GetLoginQRode
的结果将返回QR码。我不需要 Qr代码方面的帮助,因为我可以正常运行。我没有在示例中添加它来保持代码简单。
答案 0 :(得分:3)
每个控制器都有一个名为Url
的属性,该属性设置为IUrlHelper
的实现。用它来生成一个绝对URL。该应用程序不知道自己的来源/域或协议。无法从请求中可靠地提取这些内容,因为应用程序可能位于更改标头并终止ssl的代理之后。使用配置值将协议和域添加到URL。
[HttpGet]
public IActionResult GetLoginQRCode()
{
// In same controller
var url = Url.Action("Login")
// or in Different Controller
var url = Url.Action("Login", "Account")
return Ok();
}
api reference概述了所有可能的变体。