Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/14.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
C# ASP.NET Web API甚至需要MVC中的M和V吗?_C#_Asp.net Mvc_Design Patterns_Asp.net Web Api - Fatal编程技术网

C# ASP.NET Web API甚至需要MVC中的M和V吗?

C# ASP.NET Web API甚至需要MVC中的M和V吗?,c#,asp.net-mvc,design-patterns,asp.net-web-api,C#,Asp.net Mvc,Design Patterns,Asp.net Web Api,我有一个Web API应用程序,它使用一个控制器返回从文件读取的数据 所以我使用的是MVC的C(控制器)部分。我没有视图,也没有使用模型——我正在将数据存储到App_数据文件夹中或从中检索数据 我知道这是一个相当简单的解决方案,但似乎我所需要的只是C,而不是MVC。我遗漏了什么吗?随着项目规模/复杂性的增加,几乎所有的软件模式都开始变得更有意义,并且所讨论的场景反映了模式背后的假设。有许多简单的场景,其中模型和视图组件要么是隐式的,要么是由框架本身提供的,要么就是不必要的。MS ASP.NET

我有一个Web API应用程序,它使用一个控制器返回从文件读取的数据

所以我使用的是MVC的C(控制器)部分。我没有视图,也没有使用模型——我正在将数据存储到App_数据文件夹中或从中检索数据


我知道这是一个相当简单的解决方案,但似乎我所需要的只是C,而不是MVC。我遗漏了什么吗?

随着项目规模/复杂性的增加,几乎所有的软件模式都开始变得更有意义,并且所讨论的场景反映了模式背后的假设。有许多简单的场景,其中模型和视图组件要么是隐式的,要么是由框架本身提供的,要么就是不必要的。MS ASP.NET MVC本质上是提供一个框架,在MS web生态系统中实现基本的MVC模式。是否需要使用单个功能(如EF建模、剃须刀视图)取决于您


从您的问题来看,您的需求本质上是允许访问存储过程并执行基本数据转换(通过POST),然后以JSON的形式返回数据(通过GET)。单独的GET/POST请求的必要性是什么?根据您的问题,GET依赖于前面的POST请求。我建议创建中间JSON文件可能是不必要的,而只是查找数据并将其传回。

考虑您的控制器具有将从前端应用程序调用的操作。作为该调用结果发送的数据可以被视为模型。然后,前端应用程序可以使用该模型显示视图。但你也可以,不要做这种事。作为一名开发人员,如果需要正确使用MVC模式,则由您来决定。

,以帮助构建具有GUI的应用程序。ASP.NET MVC是一个框架,可帮助您根据此设计模式构建web应用程序

WebAPI与MVC设计模式无关。它是单独开发的,暂时以相同的总称分发,现在是一个自己的框架:


一些项目模板仍然在您的项目中创建“模型”和“视图”目录,这意味着您正在使用过时的项目模板,或者假设您希望在一个项目中使用MVC和Web API。

CodeCaster的回答已经很好地解释了您问题背后的“理论”。尽管如此,我还是会给出一个答案,因为我在几个月前偶然发现了这个问题,并且花了一些时间才弄明白为什么最近创建的Web API项目也有ASP.NET MVC应用程序所具有的视图和所有其他项

在Visual Studio 2013中,有一个Web应用程序模板。选择此选项时,将打开一个窗口。在此窗口中,有一个用于创建Web Api的选项。问题就在这里。当您在窗口中选择Web Api(当然这是您想要的)时,出于某种原因,它还会在中标记MVC的选项“添加文件夹和核心引用”,更糟糕的是,复选框被禁用,因此您无法“取消选中”它(如此奇怪):它看起来是这样的:

如果此时点击Ok,则将使用所有MVC引用创建API。可能不是你想要的

因此,要创建一个“纯”Web API,它只包含与Web API相关的文件和结构的引用,您需要执行以下操作:

选择空的模板,然后标记Web API的选项


如果我们不考虑控制器动作返回的数据作为视图,而是查看数据的视图,而不是HTML视图,则设计模式不指定视图的类型。在我看来,它仍然是MVC,模型仍然存在,您通常会创建要返回的数据模型,视图部分只是核心模型类的其他模型或视图

好的,但解决方案结构确实包含控制器、模型和视图文件夹,我正在使用路由和控制器类来响应URL。您的API是最近创建的吗?在CodeCaster的回答中查看我的评论,你可能会发现为什么会发生这种情况。@jpgrassi:是的,它是一两天前在VS2013中创建的。所以就是这样。您可能选择了WebAPI模板,它包含了所有MVC内容。如果它真的困扰您,请重新开始,但这次选择空模板,然后标记WebAPI选项。这是真的。在VS2013中,当您启动一个新的Web应用程序模板时,如果您单击Web API项,它会自动勾选MVC复选框,从而创建OP所说的所有结构。但是,如果您启动一个新项目并选择“Empty”,他们就会选中API的复选框。它只会创建控制器和模型(大多数时候你都需要这些),它们是两个独立操作的原因是它们发生在不同的时间。该帖子由一个实用程序调用,该实用程序用于生成电子表格文件并发送带有附件的电子邮件。存储过程需要几分钟才能运行,因此无法立即返回结果。当用户收到电子邮件时,json文件已经创建并存储。然后,他们单击电子邮件中的链接,在浏览器的页面中以html格式返回数据。因此,POST(在他们不知道的情况下,以编程方式)由同事使用的实用程序调用;当用户单击指向该文件的链接时,会调用…(续)…GET。谢谢;臭气并没有真正困扰我,但下次我会遵循这个养生法。