使用路由值在 .net core api 中生成 url 链接
Posted
技术标签:
【中文标题】使用路由值在 .net core api 中生成 url 链接【英文标题】:Generate a url link in .net core api with route values 【发布时间】:2021-12-01 18:15:35 【问题描述】:[route("value/download")]
Public IactionResult Download([fromroute] string value)
我想为上面的端点生成一个链接,我尝试使用下面的 actionlink 来生成 URL,但它返回一个空值。
输出应该是 https://hostname/controlername/routevalue/actionname
Url.ActionLink($"DownLoad", "controller", new Value= value, protocol: "https")
Url.ActionLink($"value/DownLoad", "controller", new Value= value, protocol: "https")
【问题讨论】:
嗨@Nikhil,我想你可能不理解UrlHelper。value/DownLoad
不是动作名称,动作名称是Download
。 UrlHelper 会动态找到action和controller,如果你指定了正确的参数,就会为你生成正确的请求url。
【参考方案1】:
此代码已在 Visual Studio 中测试过
如果您需要链接,对于复杂的路线,您必须使用路线名称
[Route("[controller]/value/download", Name ="download")]
public IActionResult Download(string value)
并查看
@html.RouteLink( "Go to download", "download", "https",null,null, new Value=value,null)
它会生成url
http://xxxx/controller/value/download
【讨论】:
【参考方案2】:我尝试使用下面的 actionlink 来生成 URL,但它返回一个空值
那是因为 UrlHelper 在控制器中找不到这样的动作名称(value/DownLoad)。
你需要查看Url.ActionLink
源代码来了解每个参数代表什么:
//
// Summary:
// Generates an absolute URL for an action method, which contains the specified
// action name, controller name, route values, protocol to use, host name, and fragment.
// Generates an absolute URL if the protocol and host are non-null. See the remarks
// section for important security information.
//
// Parameters:
// helper:
// The Microsoft.AspNetCore.Mvc.IUrlHelper.
//
// action:
// The name of the action method. When null, defaults to the current executing action.
//
// controller:
// The name of the controller. When null, defaults to the current executing controller.
//
// values:
// An object that contains route values.
//
// protocol:
// The protocol for the URL, such as "http" or "https".
//
// host:
// The host name for the URL.
//
// fragment:
// The fragment for the URL.
//
// Returns:
// The generated URL.
//
// Remarks:
// The value of host should be a trusted value. Relying on the value of the current
// request can allow untrusted input to influence the resulting URI unless the Host
// header has been validated. See the deployment documentation for instructions
// on how to properly validate the Host header in your deployment environment.
public static string ActionLink(this IUrlHelper helper, string action = null, string controller = null, object values = null, string protocol = null, string host = null, string fragment = null);
然后你需要修改如下代码:
@Url.ActionLink($"Download", "ControllerName", new Value= value, protocol: "https")
后端代码:
[Route("[controller]")]
public class HomeController : Controller //controller name here is Home
[Route("value/download")]
public IActionResult Download([FromRoute] string value)
return Ok();
【讨论】:
感谢您的解决方案。仍然,它返回空值。在下载端点 Url.ActionLink($"Download", "ControllerName", new Value= value, protocol: "https") 中使用它之后 您指定控制器名称吗?请与控制器分享您的操作。不知道你的控制器怎么样。 只有你的项目存在这样的controller和action,urlhelper才能生成正确的请求url。以上是关于使用路由值在 .net core api 中生成 url 链接的主要内容,如果未能解决你的问题,请参考以下文章
在 .Net Core 控制台应用程序中生成受信任的自签名证书
技术帖 | 在 Azure 应用服务中生成 .NET Core 和 SQL 数据库 Web 应用