Questions tagged «asp.net-mvc»

ASP.NET MVC框架是一个Microsoft Web应用程序框架,它实现了模型视图控制器(MVC)模式。

14
您是否应该将后端编写为API?
今天,我对我们的MVC应用程序进行了热烈的讨论。我们有一个用MVC(ASP.NET)编写的网站,它通常遵循在视图中执行某些操作的模式->击中控制器->控制器构建模型(调用获取数据的Manager,在该模型中构建模型控制器方法本身)->模型去查看->冲洗并重复。 他说我们的代码太紧密了。例如,如果我们还需要桌面应用程序,则将无法使用现有代码。 他说的解决方案和最佳实践是构建一个API,然后在您的API之上构建您的网站,然后构建一个桌面应用程序,移动应用程序等非常简单。 由于种种原因,这对我来说似乎是个坏主意。 无论如何,我似乎无法通过谷歌搜索找到任何讨论这种做法的东西。是否有人对优缺点有任何了解,为什么要这样做,为什么不应该这样做或需要进一步阅读? 我认为这是一个坏主意的一些原因: 太抽象了,无法通过API运行后端。您正在尝试使其过于灵活,这将使其变得难以处理。 MVC中内置的所有内容似乎都无用,例如角色和身份验证。例如,[授权]属性和安全性;您将不得不自己动手。 您的所有API调用都需要附加安全信息,并且您将必须开发令牌系统等等。 您将必须为程序将要执行的每个功能编写完整的API调用。您几乎要实现的每种方法都需要使用API​​。每个用户的Get / Update / Delete,以及每个其他操作的变体,例如更新用户名,将用户添加到组等,等等,每个将是一个不同的API调用。 当涉及到API时,您会丢失各种工具,例如接口和抽象类。WCF之类的东西对接口的支持非常微弱。 您有一个创建用户或执行某些任务的方法。如果要创建50个用户,则只需调用50次即可。当您决定将此方法用作API时,本地Web服务器可以命名管道连接到它,也没有问题-您的桌面客户端也可以访问它,但是突然间,您的批量用户创建将涉及在Internet上锤击该API 50次,不好 因此,您必须创建一个批量方法,但实际上您只是在为桌面客户端创建它。这样,您最终不得不a)根据与其集成的API修改API,而不能直接与其进行集成,b)做更多的工作来创建一个额外的功能。 YAGNI。除非您专门计划编写两个功能相同的应用程序,例如一个Web和一个Windows应用程序,否则这将是大量的额外开发工作。 当您无法端对端进行调试时,调试会困难得多。 许多独立的操作将需要大量的来回操作,例如,某些代码可能会吸引当前用户,检查该用户是否具有管理员角色,获取该用户所属的公司,获取其他成员的列表,并将其全部发送出去一封电邮。这将需要大量的API调用,或者为您想要的特定任务编写定制方法,而该定制方法的唯一好处是速度快,但缺点是不灵活。 可能还有其他一些原因,这些都不在我脑海中。 在我看来,除非您真的需要两个相同的应用程序,否则确实不值得。我也从未见过这样构建的ASP.NET应用程序,您必须编写两个单独的应用程序(API和您的代码),并同时对它们进行版本控制(如果您的用户页面有一个新字段,则d必须同时更新API和您使用的代码,以确保不会产生不良影响,或进行大量额外的工作以保持其健壮性)。 编辑:一些不错的回应,现在真的开始对这一切意味着什么有了一个好主意。因此,为了扩展我的问题,您将如何构建一个MVC应用程序以遵循此API结构? 例如,您有一个显示有关用户信息的网站。在MVC下,您可以: 视图-(CS)HTML页面,其中显示一个UserViewModel控制器-调用GetUser()并创建一个UserViewModel,并将其传递给具有GetUser方法的视图管理器类(与您的API相似)。 控制器执行GetUser(),但您也需要桌面应用程序。这意味着您的GetUser需要通过某种API公开。您可能需要TCP连接,或者是WCF,或者可能是Remoting。您还需要一个将是RESTful的移动应用程序,因为持久性连接不稳定。 那么,您是否会为每个API编写一个API,一个具有方法GetUser()的WCF Web服务,而代码恰好return new UserManager().GetUser()呢?和做同样事情的MVC 4 Web API方法呢?在继续直接在您的MVC控制器方法中调用GetUser时? 还是您会选择适用于所有三个应用程序的解决方案(Web api REST服务)并在其上构建所有内容,因此所有三个应用程序都进行API调用(对本地计算机的mvc调用)。 这仅仅是理论上的完美场景吗?我可以看到以这种方式进行开发的开销很大,尤其是如果您必须以一种允许您以RESTful方式进行操作的方式进行开发时。我认为其中一些已包含在答复中。 编辑2:在阅读更多内容之后,我在下面提出了一条评论,我认为这可能会解释它。我认为这个问题有点棘手。如果您将后端编写为API,让我感到困惑,我认为应该有一个单一的Web服务,所有东西(MVC应用程序,桌面应用程序,移动应用程序)都可以调用来完成工作。 我得出的结论是,您真正应该做的是确保业务逻辑层正确分离。查看我的代码,我已经这样做了-控制器将调用GetUser()管理器,然后从中创建一个视图模型以使用View进行渲染。因此,实际上,业务逻辑层是一个API。但是,如果要从桌面应用程序调用它,则需要编写WCF服务之类的内容以方便调用它。即使仅调用GetUser()一个包含代码的WCF方法return MyBusinessLayer.GetUser()就足够了。因此,API是业务逻辑,而WCF / Web api等只是让外部应用程序调用它的一小部分代码。 因此存在一些开销,因为您必须根据需要将业务逻辑层包装在不同的API中,并且必须为希望其他应用程序执行的每个操作编写API方法,此外,您还需要找出一种进行身份验证的方法,但在大多数情况下是相同的。将您的业务逻辑放在一个单独的项目(类库)中,您可能不会有任何问题! 希望这种解释是正确的。感谢它产生的所有讨论/评论。


19
什么时候比MVC更喜欢ASP.NET WebForms
我知道微软已经说过 ASP.NET MVC不能替代WebForms。 一些开发人员说,WebForms的开发速度比MVC快。但是我相信编码速度会下降到该技术的舒适水平,因此我不希望有任何答案。 鉴于ASP.NET MVC为开发人员提供了对其应用程序的更多控制权,为什么不认为WebForms已过时?或者,什么时候我应该在新开发中比MVC更喜欢WebForms?

6
有状态和无状态有什么区别?
MVC上的书籍和文档只是使用有状态和无状态术语而堆积。老实说,我只是无法理解它的意思,书在说什么。他们没有提供一个示例来了解这两种状态中的任何一种,而不是仅仅告诉HTTP是无状态的,并且使用ASP.NET MVC时,Microsoft会与之相伴。我是否缺少一些基本知识,因为我无法理解什么是有状态的,为什么是有状态的,无状态也是如此? 我想通过一个简单而简短的示例来讨论按钮或文本框之类的控件。

1
为什么.Net世界似乎包含魔术字符串而不是静态类型的替代字符串?
因此,我在.Net中工作。我在.Net中制作开源项目。我最大的问题之一不是.Net的必要性,而是它周围的社区和框架。似乎到处都有神奇的命名方案和字符串被视为做所有事情的最佳方法。大胆的声明,但看看它: ASP.Net MVC: 您好世界路线: routes.MapRoute( "Default", // Route name "{controller}/{action}/{id}", // URL with parameters new { controller = "Home", action = "Index", id = "" } // Parameter defaults ); 这意味着ASP.Net MVC将以某种方式HomeController在您的代码中查找。以某种方式创建它的新实例,然后Index 显然使用某种id参数调用该函数。然后还有其他类似的东西: RenderView("Categories", categories); ...or.. ViewData["Foobar"]="meh"; 然后XAML也有类似的事情。DataContext被视为一个对象,您必须希望并祈祷它可以解析为所需的类型。DependencyProperties必须使用魔术字符串和魔术命名约定。像这样的事情: MyData myDataObject = new MyData(DateTime.Now); Binding myBinding = new Binding("MyDataProperty"); myBinding.Source = …


2
在ASP.NET MVC 3中自定义错误处理的权威性准则是什么?
在ASP.NET MVC(本例中为3)中执行自定义错误处理的过程似乎被忽略了。我已经在网上阅读了各种问题和解答,在各种工具(例如Elmah)的帮助页面上都找到了答案,但是我感觉自己走了一个完整的圈子,但仍然没有最好的解决方案。在您的帮助下,也许我们可以为错误处理设定新的标准方法。我想保持简单,而不是过度设计。 这是我的目标: 对于服务器错误/异常: 在开发人员中显示调试信息 在生产中显示友好的错误页面 记录错误并将其通过电子邮件发送给生产中的管理员 返回500 HTTP状态代码 对于404 Not Found错误: 显示友好的错误页面 记录错误并将其通过电子邮件发送给生产中的管理员 返回404 HTTP状态代码 是否可以通过ASP.NET MVC实现这些目标?

2
混合Angular和ASP.NET MVC / Web API?
我来自使用ASP.NET MVC / Web API,现在我开始使用Angular,但不清楚混合它们的正确方法。 一旦我使用Angular,MVC服务器端概念是否仍然提供任何价值?还是我应该严格使用Web API来纯粹获取角度HTTP调用的数据? 如果VS模板添加了很多我不需要的东西,也许我应该使用更简化的起点吗? 我喜欢严格区分服务器端=纯数据和客户端=纯HTML处理的想法。


7
为什么每个人都将控制器放在一个文件夹中而将视图放在另一个文件夹中?
我正准备把弯腰的问题从asp转移到mvc框架(asp.net mvc或nancy)中。无论我走到哪里,都可以看到用于控制器/模块的文件夹和用于视图的文件夹。这是只是按类型整理事物的帕夫洛夫式反射,还是有一些更深层次的智慧在起作用?我有一个概念验证项目,将可能要一起打开的文件存储在一起,这很舒适。由于这些文件也可能互相调用,因此可以使用较短,较不易碎的相对链接进行调用。这种模式受到mvc的挑战,因为文件夹路径不再自动对应于url路径,并且在asp.net mvc中,项目模板和路由强制执行views \ controllers \ schism。 此microsoft页面介绍了区域的概念。可以理解为,由于这种人为的分离,大型应用程序变得笨拙。 人们会反对“关注点分离”,但是关注点分离已经通过拥有单独的源文件来实现。在我看来,将这些紧密耦合的源文件发送到文件夹结构的相对两端并没有任何具体收获? 还有其他人要与这个斗争吗?有小费吗?
36 mvc  asp.net-mvc 

2
在ASP.NET MVC中分离数据访问
我想确保我遵循行业标准和最佳实践,这是我第一次真正接触MVC。在这种情况下,它是使用C#的ASP.NET MVC。 我将对我的模型使用Entity Framework 4.1和代码优先对象(数据库已经存在),因此将有一个DBContext对象用于从数据库中检索数据。 在我在asp.net网站上进行的演示中,控制器中包含数据访问代码。这对我来说似乎不正确,尤其是在遵循DRY(不要重复自己)做法时。 例如,假设我正在编写要在公共图书馆中使用的Web应用程序,并且有一个用于创建,更新和删除目录中书籍的控制器。 某些操作可能需要一个ISBN,并且需要返回“ Book”对象(请注意,这可能不是100%有效的代码): public class BookController : Controller { LibraryDBContext _db = new LibraryDBContext(); public ActionResult Details(String ISBNtoGet) { Book currentBook = _db.Books.Single(b => b.ISBN == ISBNtoGet); return View(currentBook); } public ActionResult Edit(String ISBNtoGet) { Book currentBook = _db.Books.Single(b => b.ISBN == ISBNtoGet); return …

3
在ASP.NET MVC中对控制器进行单元测试是否有真正的价值?
我希望这个问题能提供一些有趣的答案,因为这是困扰我一段时间的问题。 在ASP.NET MVC中对控制器进行单元测试是否有真正的价值? 我的意思是,在大多数情况下(而且我不是天才),我的控制器方法即使在最复杂的情​​况下也是如此: public ActionResult Create(MyModel model) { // start error list var errors = new List<string>(); // check model state based on data annotations if(ModelState.IsValid) { // call a service method if(this._myService.CreateNew(model, Request.UserHostAddress, ref errors)) { // all is well, data is saved, // so tell the user …

4
为什么Web Api不支持WSDL类型?
因此,我只是开始使用.Net WebApi,我要立即注意到的一件事是,没有合同定义API的外观和使用方式(每个动作的请求/响应),通常采用以下形式:用于WCF / Soap的WSDL。 在我看来,这将是非常有价值的事情,并使您的API使用者的生活变得更加轻松。 有没有理由吗?我是否不了解编程范例或原理?有什么办法可以创造一个?

5
我们应该使用实体框架吗?
我们目前有以下堆栈: VS 2005 网络表格 SQL Server 2005 IIS 6 我们正计划过渡到此: VS 2010 MVC和Web表单 SQL Server 2008 IIS 7 我的问题是,当我们在VS 2010中使用MVC时,应该使用Entity Framework(或另一个ORM),微型ORM(例如Massive)还是仅使用普通SQL? 我已经阅读了有关VS 2010的所有教程,都是针对使用Entity Framework进行数据事务而设计的,但是在可预见的未来(超过5年)中会存在吗? 如果有关系,我们客户的应用程序可以拥有10-1,000个活跃用户。

14
新手寻求有关编程的一般建议[关闭]
需要你们中的一些人回想一下您可能不擅长编程的时代... 现在(作为软件开发人员)在我的新工作已经几个月了,已经过了试用期。几乎没有编程经验(仅C ++),并且目前正在使用asp.net MVC和silverlight。因此,有一个公司正在开发的网站,我正在努力使其变得更好,消除错误等。 问题是-通过Visual Studio了解已经建立的系统/网站。我总是感到非常不知所措,从不知道我应该看这行的哪一部分,并且通常在了解全局时遇到很多麻烦。我发现Visual Studio本身很难掌握,更不用说asp.net框架了。 我给人的印象是,因为我的同事比我更有经验,所以他们得到了所有好的工作,而我却只能做些废话-这些工作甚至都不是模糊的编程。意味着他们在学习/创造更多,而我在学习/创造几乎没有。我越来越沮丧,什么也不想说。 我并不愚蠢,我已经阅读并实践了许多基本的编程概念……我只是被该死的框架所吓倒。我看着它,只是感到瘫痪。 结果是我一直在问老一辈的老家伙,他很生气,宁愿给我轻松/无心/非编程的工作,以避免浪费时间帮助我。然后,当我听不懂某些内容时,我会犹豫是否要问他,并试图确定是否会浪费时间。 我是那种慢慢地整理东西的人,但是对细节非常关注。我认为前者使我显得无能。 有人到达我的家乡,请说些有用的信息。...我害怕在几个月内失去工作或其他原因...

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.