Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 如何测试MVC操作只能通过HTTP POST访问?_Asp.net Mvc_Asp.net Mvc 3_Mvccontrib_Mvccontrib Testhelper - Fatal编程技术网

Asp.net mvc 如何测试MVC操作只能通过HTTP POST访问?

Asp.net mvc 如何测试MVC操作只能通过HTTP POST访问?,asp.net-mvc,asp.net-mvc-3,mvccontrib,mvccontrib-testhelper,Asp.net Mvc,Asp.net Mvc 3,Mvccontrib,Mvccontrib Testhelper,我正在使用MvcContrib TestHelper在我的应用程序上测试路由。我有一个仅限于HTTP POST的操作: public TestController { [HttpPost] public ActionResult Example() { return View(); } } 公共测试控制器 { [HttpPost] 公共行动结果示例() { 返回视图(); } } 下面是一个测试失败的例子: [TestFixture] public

我正在使用MvcContrib TestHelper在我的应用程序上测试路由。我有一个仅限于HTTP POST的操作:

public TestController { [HttpPost] public ActionResult Example() { return View(); } } 公共测试控制器 { [HttpPost] 公共行动结果示例() { 返回视图(); } } 下面是一个测试失败的例子:

[TestFixture] public class RoutingTests { [TestFixtureSetUp] public void TestFixtureSetUp() { RouteTable.Routes.Clear(); Application.RegisterRoutes(RouteTable.Routes); } [Test] public void TestWithGet() { var route = "~/Test/Example".WithMethod(HttpVerbs.Get); route.ShouldMapTo(r => r.Example()); } } [测试夹具] 公共类路由测试 { [TestFixtureSetUp] public void TestFixtureSetUp() { RouteTable.Routes.Clear(); Application.registerOutes(RouteTable.Routes); } [测试] 公共void TestWithGet() { var route=“~/Test/Example”.WithMethod(HttpVerbs.Get); ShouldMapTo(r=>r.Example()); } }
但是,测试通过了!我看到另一个未回答的问题(对不起,链接错误)也提出了这个问题,而且功能似乎已经中断。有什么更好的方法可以测试此路由是否只能通过POST访问?

看起来您只是在测试ASP.NET MVC框架。我不认为这样的测试会带来价值…

使用以下代码:

var controller = new HomeController();
var methodInfo = controller.GetType().GetMethod("MrthodName");
var attributes = methodInfo.GetCustomAttributes(typeof(ActionMethodSelectorAttribute), true).Cast<ActionMethodSelectorAttribute>().ToList();
var controller=new HomeController();
var methodInfo=controller.GetType().GetMethod(“MrthodName”);
var attributes=methodInfo.GetCustomAttributes(typeof(ActionMethodSelectorAttribute),true.Cast().ToList();

属性-这是列表接受动词

他可以确保某些操作只能通过post进行。是的,你是对的。然而,这取决于上下文。我认为在大多数情况下,这样的测试并不相关,我理解你的意思,测试属性的存在就足够了。但是,我只是假设,由于MvcContrib中存在用于测试路由的
WithMethod(HttpVerbs)
,因此传递的谓词会有某种用途。不管[HttpPost]和[AcceptVerbs(HttpVerbs.Post)]之间有什么不同,这是否有效?请查看。我几乎90%确信这是一个相同的测试,它分别看到AcceptVerbsAttribute和HttpPostAttribute。反射可能是我所能想到的——我将看看是否有任何东西更接近于解析路由信息的实际方式,如果没有,我将很快接受这个答案。谢谢