[英]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項目屏幕返回一個視圖:
有關更多信息,官方文檔有充分的文檔記錄: 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.