c# - 是否可以在 ASP.NET Web API 中的模型/DTO 上定义路由(类似于 ServiceStack)?

标签 c# asp.net asp.net-web-api asp.net-core

我非常喜欢 ServiceStack 的一个功能,那就是对 DTO 的关注。您可以根据 DTO 定义路由,并定义接受 DTO 而不是 Controller 的服务。不过,我也想迁移到 ASP.NET Core。现在它是开源的,我可以看到一种使 DTO 风格的方法发挥作用的方法(使用不同的 Controller 解析器)。有人做过这样的事吗?

最佳答案

它应该相当简单。您要做的就是根据 DTO 上的属性将路由添加到路由表中。举个例子:

[Route("/page/{Id}")]
public class RoutesDemo
{
    ...
}

然后使用以下代码,您可以从 DTO 获取路由值。请注意,我已对 DTO 进行了硬编码作为示例,但您可能希望扫描程序集中的所有类型以查找特定属性以自动选取它们。

然后使用以下代码,您可以从 DTO 获取路由值:

var type = typeof(RoutesDemo);
var attribute = type.GetTypeInfo().GetCustomAttribute<RouteAttribute>();
if (attribute != null)
{
    // /page/{Id}
    var routeInfo = attribute.Template;
}

从这里,您希望将此路由数据添加到应用程序的路由表中,记录路由关联的类型,因此一旦路由匹配,您就可以从对象中提取数据(这是记录路由的位置)输入类型)。

ServiceStack 有一个很好的流畅界面来执行此操作(见下文),但概念完全相同。

Routes
    .Add<Hello>("/hello")
    .Add<Hello>("/hello/{Name}");

希望这会有所帮助!

关于c# - 是否可以在 ASP.NET Web API 中的模型/DTO 上定义路由(类似于 ServiceStack)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37600970/

相关文章:

c# - SQL 写入 ASP.NET 用户表不保存

c# - Web api 中的请求始终为空?

c# - FTP 下载将 CrLf 转换为 Lf

c# - 对列进行排序需要 IComparable

c# - 将文件从 asp.net web 窗体项目上传到 IIS 服务器时,原始文件位于临时文件夹中

c# - 所有的 Web 请求都是并行执行和异步处理的吗?

javascript - 为什么添加额外的 header 会导致 AJAX 调用失败

c# - Linq-to-SQL 的开销

c# - ASP.NET 从代码隐藏切换控件可见性

asp.net - IE 7's "“查看源代码”按钮如何与javascript交互?