问题
我当前的项目要求我根据几乎每个操作的不同 HTTP 请求标头做不同的事情。
目前,我有一个庞大的控制器(全部用于相同的资源类型),每个动作方法都有一个 ActionName 属性(这样我就可以拥有同一个动作的多个版本,它们采用相同的参数,但做不同的事情)和一个自定义FilterAttribute(实现几乎与预览版 5 中的 AcceptVerbsAttribute 完全相同)检查某些标头是否具有某些值。
我真的很想将代码推送到单独的控制器中,并根据标题在它们之间选择 RouteTable,但想不出最干净的方法。
例子
例如,假设我有一个文件列表。服务必须以以下两种方式之一处理请求:
客户端想要一个 zip 文件,并将“accept: application/zip”作为标题传递,我获取文件列表,将它们打包成一个 zip 文件,然后将其发送回客户端。
客户端想要一个 html 页面,所以它通过“accept: text/html”,站点发回一个表格格式的 html 页面,列出文件。