RESTful约定表明在单个对象上使用复数名词.
什么是命名ASP.NET MVC控制器的复数约定,即
ProductController或ProductsController?
asp.net-mvc naming-conventions pluralize asp.net-mvc-controller
是否可以以编程方式列出所有控制器的名称及其操作?
我想为每个控制器和操作实现数据库驱动的安全性.作为开发人员,我知道所有控制器和操作,并且可以将它们添加到数据库表中,但有没有办法自动添加它们?
在Asp.net MVC中,网址结构如下
http://example.com/ {controller}/{action}/{id}
对于每个"控制器",比如http://example.com/blog,都有一个BlogController.
但是我的{controller}部分的url不是预先决定的,但它是在运行时动态确定的,我如何创建一个"动态控制器",将任何东西映射到同一个控制器,然后根据该值确定什么去做?
与{action}相同,如果我的网址的{action}部分也是动态的,有没有办法对此方案进行编程?
我正在研究我的第一个真正的ASP.NET MVC项目,我注意到我一直在工作的控制器变得相当大.这似乎违背了保持控制器薄的最佳做法.
我已经做好了将业务逻辑从控制器中删除的工作.我为此使用了一个单独的层.每个操作主要调用业务层中的方法,并根据模型状态是否有效来协调最终结果.
也就是说,控制器有很多动作方法.直觉上,我想将控制器分解为子控制器,但我没有看到一个简单的方法.我可以简单地将控制器分解为单独的控制器,但是我松开了层次结构,感觉有点脏.
是否有必要使用大量精简操作重构控制器?如果是这样,最好的方法是什么?
...猜我是第一个问这个问题的人?
假设您有以下路由,每个路由在不同的控制器上声明:
[HttpGet, Route("sign-up/register", Order = 1)]
[HttpGet, Route("sign-up/{ticket}", Order = 2)]
Run Code Online (Sandbox Code Playgroud)
...你可以在MVC 5.0中使用除Order参数之外的相同代码执行此操作.但升级到MVC 5.1后,您会在问题标题中收到异常消息:
找到了与URL匹配的多种控制器类型.如果多个控制器上的属性路由与请求的URL匹配,则会发生这种情
那么新RouteAttribute.Order属性只是控制器级别?我知道在AttributeRouting.NET中你也可以这样做SitePrecedence.当所有操作都在同一个控制器中时,是否有获得上述路由的唯一方法?
更新
对不起,我应该提到这些路由是在MVC控制器上,而不是WebAPI.我不确定这会如何影响ApiControllers.
asp.net-mvc-controller attributerouting asp.net-mvc-5 asp.net-mvc-5.1
我们可以使用HTML视图的默认文件夹约定的MVC应用程序,但是我们想要设置备用"服务"文件夹,其中控制器仅用于返回xml或json的Web服务.
因此路由"/ Services/Tasks/List"将路由到"/Services/TaskService.cs",而"/ Tasks/List"将路由到标准"/Controllers/TaskController.cs"
我们希望将服务控制器与视图控制器分开.我们认为区域或使用其他项目不会起作用.什么是最好的方法来解决这个问题?
我想了一整天找出获得ApplicationDbContext的ManageController.cs默认MVC 6项目.
我上网了,谷歌搜索了很多,但似乎没有人像我一样有问题.这可能很简单,但我无法弄清楚.有人有想法吗?
这是我尝试过的:
IServiceProvider service = new IServiceProvider();
var _context = service.GetService<ApplicationDbContext>();
Run Code Online (Sandbox Code Playgroud) .net c# asp.net-mvc-controller asp.net-core-mvc asp.net-core
如果我有2个控制器动作:
[HttpGet]
public ActionResult Login()
{
//...
return View();
}
Run Code Online (Sandbox Code Playgroud)
和
[HttpPost]
public ActionResult Login(FormCollection values)
{
//...
return RedirectToAction("Index","Home");
}
Run Code Online (Sandbox Code Playgroud)
似乎Post装饰是必需的(这很有意义),但HttpGet装饰完全是可选的.无论有没有,它都能正常工作.除非另有说明,否则MVC似乎将控制器操作默认为HttpGet.
我将不得不决定是否希望我的代码的未来读者必须自己解决这个问题,或者我是否想要记住在任何地方添加HttpGet以保持一致性.但我的问题不是关于包含明确的装饰是否是一个好的做法,即使它已经违约了.
我的问题是:总是这样我不需要用HttpGet来装饰控制器方法吗?如果我做或没有明确指定,有什么方法可以咬我吗?我已经搜索了这个但是我能找到的所有帖子都描述了为什么你可能想要使用两个注释而不是特别包含HttpGet的原因.
[ActionName("about-us")]
public ActionResult EditDetails(int id)
{
// your code
}
Run Code Online (Sandbox Code Playgroud)
上面的操作适用于操作,但我希望能够为控制器执行相同(或类似),即在URL名称中也使用连字符.有没有简单的方法来实现这一点(我尝试了ActionName属性,但没有运气)
asp.net-mvc asp.net-mvc-routing asp.net-mvc-controller asp.net-mvc-2
我遇到了一个问题,我在我的视图中有一个Html.DropDownList,它会在我第一次提交表单时回发所选的值,但每个后续的回发只会发布初始回发的数据.所以我将sports ="transient"添加到组件元素中,我已经为city windsor配置了我的控制器,这解决了问题,但当然回传需要更长的时间,因为每个请求实例化一个新的控制器.鉴于上述信息,有哪些见解,建议或解决方案可能有助于确定我对控制器生活方式的原始问题?感谢所有的帮助和支持!
asp.net-mvc castle-windsor ioc-container asp.net-mvc-controller
asp.net-mvc ×7
c# ×2
.net ×1
actionmethod ×1
asp.net-core ×1
http-get ×1
http-post ×1
pluralize ×1