当前位置:  开发笔记 > 开发工具 > 正文

是否可以使用ASP.NET Core Web API和Razor视图并获取Intellisense?

如何解决《是否可以使用ASP.NETCoreWebAPI和Razor视图并获取Intellisense?》经验,为你挑选了0个好方法。

如果我在Asp.Net Core 1.x中构建Web API项目,并且我想在同一个项目或解决方案中构建前端,是否可以创建前端页面并使用Razor与Visual Studio的Intellisense?

该应用程序是围绕一个公共消费的API构建的,但由于我的应用程序将使用相同的数据,我认为使用我自己的API而不是为API调用和"常规"MVC构建单独的方法或构造是有意义的(调用controller,获取模型数据,返回视图).客户端将拥有自己的前端并获取数据.我将拥有自己的前端,但我希望它集成在同一个VS解决方案中.

一个缺点是我失去了我的智能感知,因为我正在构建它,消耗从API返回的JSON.我知道API是关于返回数据而不是视图.我正在努力获得最好的世界,并通过Visual Studio功能提高工作效率.

我读过的都比较旧.SO也有较老的问题.我阅读了很多关于使用API​​返回视图的内容,但我不确定是否需要它.我想同时做一个普通的非Web API项目和API项目.

这可能吗?

我的理解是没有/因为Razor的全部意义在于它是在服务器上完成的,API是针对应用程序之外的客户端.换句话说,我需要构建一个调用我的API控制器的控制器,所以我得到了Intellisense,这似乎有点多余,而且在服务器上更难处理.

一些可能性:

使用带有Razor语法的ASP.NET Core构建REST API

ASP.NEt MVC使用Web API返回Razor视图

asp.net mvc消费asp.net web api终点

编辑:这似乎是合乎逻辑的,https://docs.microsoft.com/en-us/aspnet/core/mvc/controllers/areas

编辑:这是我做的,以此为指导:

https://msdn.microsoft.com/en-us/magazine/mt763233.aspx

我在我的项目中创建了一个区域.在这之下,我创建了一个区域的名称,在此我创建了控制器,视图(在此主页下).

在我添加的Startup.cs文件中,

    app.UseMvc(routes =>
    {
        routes.MapRoute(name: "areaRoute",
          template: "{area:exists}/{controller=Home}/{action=Index}");

        routes.MapRoute(
            name: "default",
            template: "{controller=Home}/{action=Index}");
    });

URL是localhost:port/AreaName

在我的Controller中,我能够重用我的服务层中的服务,这是我在项目早期决定的抽象.

namespace books.Areas.Controllers
{
    [Area("Books")]
    public class HomeController : Controller
    {
        private readonly AppSettings _appSettings;

        public HomeController(Microsoft.Extensions.Options.IOptions appSettings)
        {
            _appSettings = appSettings.Value;
        }
        // GET: //
        public IActionResult Index()
        {
            var myConn = _appSettings.ConnectionString;
            var getBooks = new BookLoanService(myConn);
            return View(getBooks.GetAll());
        }
    }
}

这与我的API控制器使用的服务层相同.服务层有(我正在使用Dapper),

public List GetAll()
        {
            using (IDbConnection db = new SqlConnection(_connectionString))
            {
                string SqlString = "SELECT TOP 5 last_name, first_name FROM books";
                var myBooks = (List)db.Query(SqlString);
                return myBooks ;
            }
        }

一旦我能够获得我的类型,我就可以在我的区域中的索引中使用Razor:

@model System.Collections.Generic.List
@{

}


    @foreach(var person in Model)
    {
        
  • @person.last_name
}

在没有修改的情况下,我仍然可以使用我的api/values类型的URL来访问我的API,并且我可以通过Ajax调用API在初始服务器呈现之后刷新我的页面的一部分.

推荐阅读
依然-狠幸福
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有