C# ASP.NET MVC网站(非project)是否可以返回HttpResponseMessage
我正在使用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 非常感谢您的帮助 谢谢 编辑1C# 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
非常感谢Fals的投入。我的问题是如何创建一个空网站,并在中添加所有必要的功能。解决方案是使用Nuget获取评论中提到的包,然后按照中的步骤进行操作。WebAPI是一个基于HTTP开发Restfull服务的框架。此框架被分离到另一个程序集
System.Web.Http
,因此您可以在任何地方托管它,而不仅仅是在IIS中。Web API直接与HTTP请求/响应一起工作,然后每个控制器都继承自IHttpController
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文件添加到您的
文件夹中,您可以在其中定义Web API路由方案,并在Global.asax.cs(或Startup.cs)文件中注册该类/App\u Config/
整个过程都有详细的说明:我的博客中记录了各种步骤,以及它们的优缺点和您可以根据具体情况采取的各种备选方案。是否可以在网站中使用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项目,但我们不想在部署时发布编译后的程序集——因此出现了疯狂的匆忙。