簡體   English   中英

如何在.net核心項目中添加View路由?

[英]How to add View routing in a .net core project?

我已經創建了一個.Net Core Web API程序。 我想為其添加一個視圖。 在同一項目下,我添加一個“視圖”文件夾。 在路由所有API請求的HomeController中,創建了以下內容:

[HttpGet("view")]
    public IActionResult Index()
    {
        return View();
    }

在我的Views文件夾中,我創建了一個文件夾“ Home”,並添加了“ Index.cshtml”。

當我啟動API並導航到“ ../view”時,將return View(); ;。 行,但隨后返回500 Internal Server Error。

這就是我不喜歡MVC約定的“自動”方法。 如果約定不起作用,我不知道將視圖鏈接到控制器的位置。

更新,這可能應該是我的第一個行動方案。 我在Controllers文件夾中添加了一個新類,並在VS2015中使用了MVC Controller模板。 然后,我添加了一個視圖以進行匹配,但是它仍然無法自動運行。

因此,為清楚起見,我的項目是:具有Web API模板的ASP.NET Core Web Application(.NET Core) 我有一個“作業”控制器類,該類在開始時就被添加為“值”,並重命名了。 然后,我添加了一個名為“ HomeController”的MVC Controller Class ,唯一的方法是“索引”。 我添加了一個名為“ Views”的文件夾和一個名為“ Home”的子文件夾,並添加了一個名為“ Index.cshtml”的MVC View Page

我嘗試使用“ return View();” 在Index方法中不起作用。 然后,我嘗試在Index方法上方添加[Route(“ Home / Index”)]。 無論哪種方式,URL都會使我到達“ return View();”處的斷點。 但它永遠不會返回視圖。

注意:要在Web API項目中返回視圖有點奇怪,Web API項目應該返回某些數據結構,例如使用return new JsonResult(your_json_here)的 json。

注意2:您需要Microsoft.AspNetCore.Mvc框架(隨Web API模板安裝)

無論如何,您有不同的方法在asp.net核心應用程序中配置路由:

  • 創建和擴展默認路由

Configure方法中的路由配置示例:

app.UseMvc(routes =>
{
           // You can add all the routes you need here

           // And the default route :
           routes.MapRoute(
                name: "default_route",
                template: "{controller}/{action}/{id?}",
                defaults: new { controller = "Home", action = "Index" }
           );
});
  • 使用屬性

如果您使用屬性配置路由,請不要忘記控制器的屬性:

路線/ index的示例:

[Route("")]
public class HomeController : Controller
{
     [HttpGet]
     [Route("[action]")]
     public IActionResult Index()
     {
        return View();
     }
}

路線/ home / index的示例:

[Route("[controller]")]
public class HomeController : Controller
{
     [HttpGet]
     [Route("[action]")]
     public IActionResult Index()
     {
        return View();
     }
}

路由/ iputwhatiwant / actionnameiwant的示例

[Route("iputwhatiwant")]
public class HomeController : Controller
{
     [HttpGet]
     [Route("actionnameiwant")]
     public IActionResult Index()
     {
        return View();
     }
}

我的.NET Core Web API項目屏幕返回一個視圖: 我的.NET Core Web API項目的屏幕返回視圖

有關更多信息,官方文檔有充分的文檔記錄: https : //docs.microsoft.com/zh-cn/aspnet/core/fundamentals/routing

在開發路由約定時,我花了很長的時間來學習路由約定,但似乎已經標准化了幾個版本。 在MVC: ASP.NET MVC 5中的屬性路由中查看有關本主題的本教程文檔,它不是MVC而不是WebCoreAPI的來源。 如果您有特定於Web Core API的更好文檔,請使用該文檔。

ASP.NET Web Core 構建Web API教程文檔對您似乎想做的事情有一些好處。 具體來說,標題為“獲取待辦事項”的部分具有以下代碼:

[HttpGet("{id}", Name = "GetTodo")]
public IActionResult GetById(long id)
{
    var item = _todoRepository.Find(id);
    if (item == null)
    {
        return NotFound();
    }
    return new ObjectResult(item);
}

通過某種程度的MVC路由體驗來查看它,它與您的方法特別不同,因為使用的HTTP動詞注釋成員屬性值是一個查詢參數。

看到我仍在使用已知的專業知識進行猜測,我認為您需要修復屬性路由,並且可能像NightOwl888建議的那樣返回ObjectResult而不是視圖。 服務器錯誤以及異常消息還可能具有更多有用的信息。

編輯:對不起,我可能誤會了你的問題。 如果您嘗試構建一個提供動態網頁的應用程序,而不是提供數據對象結果的WebAPI的應用程序,則此Build MVC Web App教程類似於我之前提到的“ Build a web API”教程,可能會導致您的應用程序結構問題回答。 如果您嘗試同時進行這兩個操作 ,則可能應該從MVC Web App結構開始或使用兩個單獨的項目。

您如何從Windows命令行運行此Web應用程序?...能給我們詳細的HTTP500錯誤。 它可能會顯示與路由錯誤不同的內容,因為通常會顯示404。

[Route("[controller]")]
public class HomeController : Controller

注意Route定義中的自動魔術師“ [controller]”,我認為現在有必要

我完成這項工作的(唯一)方法是將路徑聲明為操作上的屬性-與您執行的方法相同,但格式如下(控制器/操作):

[HttpGet("Home/Index")]
public IActionResult Index()
{
    return View();
}

我不見了:

"preserveCompilationContext": true

在我的project.json的構建選項中

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM