C# MVC和WebAPI使用同一个控制器,有人能解释一下如何使用吗?
这是我的控制器-C# MVC和WebAPI使用同一个控制器,有人能解释一下如何使用吗?,c#,.net,asp.net-mvc,asp.net-mvc-4,asp.net-web-api,C#,.net,Asp.net Mvc,Asp.net Mvc 4,Asp.net Web Api,这是我的控制器- namespace MvcApplication.Controllers { public class HomeController : Controller { public ActionResult Contact() { ViewBag.Message = "Your contact page."; return View(); }
namespace MvcApplication.Controllers
{
public class HomeController : Controller
{
public ActionResult Contact()
{
ViewBag.Message = "Your contact page.";
return View();
}
public JsonResult GetPartNumbers()
{
var PartNumbers = ProductModel.LoadAllPartNumbers().ToArray();
return Json(PartNumbers, JsonRequestBehavior.AllowGet);
}
}
}
我没有从ApiController继承。它仍然可以工作,因为它可以返回MVC请求的ActionResult数据类型以及api请求的基本数据类型。这是我的WebApiConfig文件-
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
}
我正在使用MVC4。现在主要的问题是,我没有继承ApiController,这是如何工作的?如果这可以工作,ApiController需要什么
编辑
public bool SaveEvent(string PartNumber, string DateTimeScheduled, string DateTimeEnd, string Notes, string PSI)
{
return DiaryEvent.CreateNewEvent(PartNumber, DateTimeScheduled, DateTimeEnd, Notes, PSI);
}
上述方法不返回ActionResult,而是一个原语类型,但它是通过ajax调用的,可以将bool true或false作为返回Json的方法返回给HomeController 如果您的web url像这样
http://yourdomain/home/GetPartNumbers
它返回Json结果
现在根据您的编辑,您有了名为SaveEvent的方法。这被称为http://yourdomain/home/SaveEvent.
这也被MVC管道称为。当您返回像true或false这样的结果或任何不是ActionResult类型的字符串时,它将得到转换后的ContentResult并返回到AJAX调用
此处不会调用Web API路由
即使当时WEB API不可用,开发人员也可以使用MVC和REST
若要进一步检查,请将以下代码放入控制器中,您可以看到在不返回actionresult时转换方法的结果类型
protected override void OnActionExecuted(ActionExecutedContext filterContext)
{
string resultType = filterContext.Result.GetType().Name;
base.OnActionExecuted(filterContext);
}
如果您不想调用这样的操作,那么您已经显式地为它们设置了NoAction属性或将其设为private
[NonAction]
public object Test()
{
return new { test = "Jinal" };
}
您如何确定它适用于同一控制器?如何访问它?我不确定我是否理解这个问题-MVC有
ActionResult
和JsonResult
。/api/home
是否适合您?您正在使用MVC的rest样式。Rest只能返回结果。但是在下一个版本中,我们有一个控制器,它具有MVC和WebAPI的抽象。在这种情况下,你将无法区分两者。是的。除非它不是马克,谢谢!!我知道操作必须返回ActionResult类型,否则该操作将无法工作。因此,基本上一个操作可以返回基本类型,这些类型被转换为ContentResult right!!对甚至可以返回类的对象。在这种情况下,它将调用tostring方法并返回结果。