C# ASP.NET MVC网站(非project)是否可以返回HttpResponseMessage

C# ASP.NET MVC网站(非project)是否可以返回HttpResponseMessage,c#,asp.net-mvc,rest,C#,Asp.net Mvc,Rest,我正在使用ASP.NETMVC(不是ASP.NETWebAPI)创建一个RESTfulWebService。我想做的是让控制器中的每个方法根据输入参数(即json或xml)返回结果 如果我使用的是ASP.NET Web API,则HttpResponseMessage可用于此目的。当我试图从ASP.NET MVC中的控制器返回HttpResponseMessage时,没有任何细节 我已经读到,在这种方法中,我应该使用ActionResult。如果我这样做,那么我需要创建一个从ActionResu

我正在使用ASP.NETMVC(不是ASP.NETWebAPI)创建一个RESTfulWebService。我想做的是让控制器中的每个方法根据输入参数(即json或xml)返回结果

如果我使用的是ASP.NET Web API,则HttpResponseMessage可用于此目的。当我试图从ASP.NET MVC中的控制器返回HttpResponseMessage时,没有任何细节

我已经读到,在这种方法中,我应该使用ActionResult。如果我这样做,那么我需要创建一个从ActionResult继承的XmlResult,因为它不受支持

我的问题是为什么HttpResponseMessage在这两种情况下工作不一样。我知道在Web API中,我们继承自ApicController,而在ASP.NET MVC中,我们继承自System.Web.MVC.Controller

非常感谢您的帮助

谢谢

编辑1
非常感谢Fals的投入。我的问题是如何创建一个空网站,并在中添加所有必要的功能。解决方案是使用Nuget获取评论中提到的包,然后按照中的步骤进行操作。

WebAPI是一个基于HTTP开发Restfull服务的框架。此框架被分离到另一个程序集
System.Web.Http
,因此您可以在任何地方托管它,而不仅仅是在IIS中。Web API直接与HTTP请求/响应一起工作,然后每个控制器都继承自
IHttpController

MVC在
System.Web.MVC
上实现了它。再加上ASP.NET框架,您必须在
Web应用程序
中使用它。每个MVC控制器都继承自
IController
,它在您和真实的
HttpRequest
之间建立了一个抽象层

您仍然可以直接在MVC控制器中使用
HttpContext.Response
访问请求,或者如您所说,继承一个新的
ActionResult
来执行任务,例如:

public class NotFoundActionResult : ActionResult
{
 private string _viewName;
 public NotFoundActionResult()
 {

 }
 public NotFoundActionResult(string viewName)
 {
  _viewName = viewName;
 }
 public override void ExecuteResult(ControllerContext context)
 {
  context.HttpContext.Response.StatusCode = 404;
  context.HttpContext.Response.TrySkipIisCustomErrors = true;

  new ViewResult { ViewName = string.IsNullOrEmpty(_viewName) ? "Error" : _viewName}.ExecuteResult(context);
 }
}

ActionResult
具有HTTP错误的含义。

事实上,这确实是可能的。您基本上有两种选择:

  • 开发自定义的
    ActionResult
    类型,这可能是一项繁重的工作,也很难实现
  • 向您的网站添加WebAPI支持
我建议你做后一种,这样你将拥有两个世界中最好的一个。为此,您应执行以下操作:

  • 使用NuGet安装以下Web API包:
    Microsoft.AspNet.WebApi.Core
    Microsoft.AspNet.WebApi.WebHost
  • 将一个或多个APIController添加到
    /Controllers/
    文件夹中
  • WebApiConfig.cs文件添加到您的
    /App\u Config/
    文件夹中,您可以在其中定义Web API路由方案,并在Global.asax.cs(或Startup.cs)文件中注册该类

整个过程都有详细的说明:我的博客中记录了各种步骤,以及它们的优缺点和您可以根据具体情况采取的各种备选方案。

是否可以在网站中使用Web API?两者都是MVC。这不就是每个包中包含的包吗?是的,是的,默认模板已经随Web API提供了。如果您不明白,只需从nuget安装Web Api Web主机包即可:)如果我想从一个空的站点开始,最好的步骤是什么?我使用Nuget获取:Microsoft.Net.Http.2.2.18、Microsoft.AspNet.WebApi.Core.5.0.0、Microsoft.AspNet.WebApi.Client.5.0.0、Microsoft.AspNet.Razor.2.0.30506.0、AspNetMvc.4.0.20710.0、Microsoft.AspNet.Razor2.0.30506.0和Microsoft.AspNet.WebPages.2.0.30506.0。所有内容都会生成,但它不能显示任何内容最新版本是Web API 2,它随VS 2013和VS 2012一起更新:D:开始工作-没有正确的URL。非常感谢你的帮助!我最大的问题是我不知道如何创建一个网站。我让它工作的是来自模板的WebAPI项目,但我们不想在部署时发布编译后的程序集——因此出现了疯狂的匆忙。