问题

我当前的项目要求我根据几乎每个操作的不同HTTP请求标头执行不同的操作。

目前,我有一个大型的Controller(全部用于相同的资源类型),并且每个操作方法都有一个ActionName属性(这样我可以有相同操作的多个版本,它们采用相同的参数,但做不同的事情)和一个自定义FilterAttribute(几乎与预览5中的AcceptVerbsAttribute一样实现),用于检查某些标头是否具有特定值。

我真的想将代码推送到单独的控制器中,并根据标头在它们之间选择RouteTable,但是无法想到最简洁的方法。

例如,假设我有一个文件列表。 该服务必须以两种方式之一处理请求:

  1. 客户端想要一个zip文件,并将“accept:application / zip”作为标题传递,我获取文件列表,将它们打包成一个zip文件,然后将其发送回客户端。

  2. 客户端想要一个html页面,所以它传递“accept:text / html”,该站点发回一个表格格式的html页面列出文件。

===============>>#1 票数:4 已采纳

听起来你的行为与基于哪个标题的行为略有不同。我会尝试尽可能地区分差异。

例如,如果应用程序逻辑相同,但唯一的区别是您如何呈现对用户的响应,您可以考虑编写一个自定义ActionResult,它根据Http标头执行不同的操作。

但是,如果逻辑完全不同,则可以实现附加到每个路由的自定义路由约束(IRoutConstraint)。 看一下HttpMethodConstraint实现的想法。

===============>>#2 票数:0

你应该看一下这篇文章 它描述了基于http头的json和xml响应的实现。

===============>>#3 票数:0

我不确定你需要基于标题的独立控制器; 这种结构听起来非常合理。 如果你的控制器很大,请考虑它是否处理多个资源,如果是,它可能应该根据资源分成多个控制器?

===============>>#4 票数:0

不确定是否可能,但似乎这就像预览5添加的AcceptVerbs属性。 我将看看它是如何实现的(获取MVC源代码),看看你是否可以根据内容类型添加类似内容。

  ask by Alex Lyman translate from so

未解决问题?本站智能推荐:

3回复

ASP.NET MVC自定义控制器目录

我正在制作一个ASP.NET MVC网站,并且有一组相关的表单(我们称它们为Foo)。 我组织它们的第一个尝试是具有以下结构: ...并拥有这样的路线: 不幸的是,由于大约有8种Foo子类型,因此FooController变得非常大并包含其自己的子路由信息。 我的下一个选择是
1回复

如何通过控制器动作方法注册新路线?

我必须开发一些页面和这些页面的公共句柄(又名别名)。 (要想出一个主意:在facebook中,您可以为页面添加别名,最终URL看起来像facebook/alias而不是facebook/somelongpieceofsomestuff )。 我将公共句柄存储在db表中,并确保所有句柄
3回复

为什么Asp.net MVC在具有不同参数时不能区分两个动作?

我试图在我的Asp.net MVC应用程序中有两种不同的帐户注册方法,一种用于一般用户注册,另一种用于注册特定注册令牌的用户。 因此,我的AccountController有以下方法签名: 但是,当我转到http://localhost/Account/Register我得到一个异常,
3回复

如何在共享主机中部署ASP.NET MVC应用程序而不丢失漂亮的uri?

我试图在运行于IIS 6和Windows 2003的共享服务器中上载ASP.NET MVC应用程序。我无权访问IIS。 我已如下更改global.asax.cs文件: 它工作正常,但不会在控制器末尾删除.aspx 。 有没有一种方法可以删除URL中的.aspx扩展名?
1回复

如何控制路线匹配后返回的内容?

使用ASP.NET MVC,当路由匹配时,框架将确定Controller类型,然后使用ControllerActivator类创建它的新实例,然后执行Action方法,最后将其结果返回给请求调用者。 出于好奇,如果我想在路由和Controller之间进行精确干预。 假设控制器不符合我的需
1回复

ASP.NET MVC路由404错误

首先,我想展示代码 这是我的路由categoryName和subName是变量 这是我的方法; 但是我得到了404.我该怎么写我的路线。 UPDATE 这是默认路线。
1回复

在asp.net混合(Web表单和MVC)应用程序中配置URL路由

我有一个其他人正在开发的应用程序,该应用程序最初是一个包含多个部分的Web.forms应用程序,现在正在转换为MVC。 MVC有两个部分,一个工作正常,但另一个我遇到了路由问题。 该路由在.cshtml中显示为: 该项目是Web窗体,带有一个名为Areas> TablePr
1回复

asp.net(和mvc)可能会更改代码中的iis重写规则

我知道已经问过很多次了,但是我还没有看到实际的答案-使用asp.net,也许使用mvc,是否可以更改应用程序的重写规则? 正常的答案是“使用mvc路由”,但是据我了解,这增加了文件的开销,这些文件本来就被认为是静态的-因此,可以对诸如CSS文件和图像之类的东西使用IIS重写。仍然可以正常运
1回复

.net MVC使用可选参数路由到控制器

我对MVC路由有疑问。 我有一个控制器方法,可以通过许多不同的URL组合来调用它。 为了克服这个问题,我使用了可选参数。 这是我的控制器方法签名... 前两个参数不是可选的,但始终是预期的。 这是我的网址路线。 现在,我想说的是将放置{* queryvalue
1回复

URL中的MVC路线隐藏控制器

我要建立一条路径,使控制器名称不显示在URL中。 我从这条路线开始: 和控制器方法: 哪个可行,但生成URL: tag/tagged/money 我想使用URL: tagged/money 我更改了路线以删除控制器名称: 当我手动输入URL时,哪个路由正