gpt4 book ai didi

c# - automapper 可以生成 url 吗?

转载 作者:太空狗 更新时间:2023-10-29 21:02:49 24 4
gpt4 key购买 nike

我希望自动映射器为 View 模型生成 URL。例如,这是我的数据对象:

public class User
{
public int Id { get; set; }
public int Name { get; set; }
}

View 模型看起来像这样:

public class UserListItem
{
public string Name { get; set; }
public string EditUrl { get; set; }
}

我希望使用为应用程序定义的路由生成 EditUrl 属性。

像这样:

listIten.EditUrl = Url.Action("Edit", "UserController", new { id = user.Id });

似乎没有办法让 AutoMapper 这样做。没有 RequestContext、UrlHelper 或任何可用于映射表达式的东西,我还没有找到任何方法在调用 Mapper.Map 时传递上下文。

我错过了什么吗?还是一开始就想这样做只是个坏主意?

更新:额外的背景

我正在研究为 MVC View 生成 URL 的替代方法,目的是尽可能简化 ASP.NET MVC 应用程序的维护。在映射 View 模型时生成 URL 是备选方案之一。测试和清理 View 很容易。在某些情况下,它还会促进 View 的可重用性。在尝试这个想法时,我遇到了问题,因为 AutoMapper 无法接受任何类型的(动态)上下文以进行 Map 操作。

最佳答案

我认为这不是 AutoMapper 的工作。

路由是特定于 ASP.NET 的,AutoMapper 实际上只适用于对象映射。它没有 HTTP 上下文的可见性(也不应该),因此无法完成。

如果你想在多个地方“重用”这个逻辑,为什么不创建一个强类型的 HTML 帮助器呢?

public static MvcHtmlString EditUserLinkForModel<UserListItem>(this HtmlHelper<UserListItem> htmlHelper)
{
var urlHelper = new UrlHelper(htmlHelper.ViewContext.RequestContext);
return urlHelper.Action("Edit",
"UserController",
new { id = htmlHelper.ViewData.Model.UserId });
}

查看:

@Html.EditUserLinkForModel()

尽管这可能有点矫枉过正。这是一个 1 类轮! :)

关于c# - automapper 可以生成 url 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6423136/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com