将现有Web Api项目添加到现有Mvc项目

时间:2016-09-12 18:37:40

标签: c# asp.net-mvc asp.net-web-api2

我的解决方案中有两个项目,一个mvc项目和一个web api项目。在mvc应用程序中使用web api项目的最佳方法是什么?

到目前为止我提出的选项:

  • 部署两个项目并使用帮助程序类与api(javascript或服务器端)进行交互
  • 添加对web api项目的引用,该项目为mvc项目添加api功能(不确定如何正确地将api项目集成到mvc项目中,我该怎么做?)

如果有更好的选择,请分享。

2 个答案:

答案 0 :(得分:0)

在控制器文件夹中,您有以下文件:

namespace BeerDev.Controllers
{
    public class HomeController : Controller
    {
        public ActionResult Index()
        {
            ViewBag.Title = "Home";

            return View();
        }
    }
}

使用以下文件创建另一个名为ControllersApi的文件夹:

namespace BeerDev.ControllersApi
{
    public class HomeController : ApiController
    {
        public IHttpActionResult Get()
        {
            string beers;
            using (StreamReader sr = new StreamReader(HostingEnvironment.MapPath("~/mockData/beerFront.json")))
            {
                beers = sr.ReadToEnd();
            }

            if (string.IsNullOrEmpty(beers))
            {
                return NotFound();
            }
            return Ok(beers);
        }
    }
}

在Web Api项目中,有一种特殊的控制器,但仍然是一个控制器。

您可以参考此webAp2_example

答案 1 :(得分:0)

如果ASP.Net MVC应用程序是唯一使用Web API的应用程序,那么将它们放在单个项目中是有意义的。

在我的场景中,我使用Angular使用SPA,因此我将MVC和Web API控制器保存在Controller文件夹中的单独文件夹中。

主要优点是我可以共享模型和类库。另外,我不必担心CORS。

enter image description here

API控制器

请注意 RoutePrefix

namespace MyApp.Web.Controllers.API
{
    [RoutePrefix("api/users")]
    public class UsersApiController : ApiController
    {
    }
}

MVC控制器

namespace MyApp.Web.Controllers.MVC
{
    public class UsersController : Controller
    {
        public ActionResult Index()
        {
            return View();
        }
    }
}