【发布时间】:2018-02-04 20:29:47
【问题描述】:
我无法让 Angular2/.Net Core 中的路由正常工作。
我已经使用 Angular 启动了一个默认的 .Net Core Web 项目,并成功地创建了一个具有适用视图组件的新控制器。该页面的目的是显示文档列表,并让您可以选择单击标题以在单独的视图中查看每个文档。
只要一切正常,它就会显示页面的内容,我还可以显示从数据库中检索到的文档列表。路由如下所示:
@NgModule({
declarations: [
AppComponent,
NavMenuComponent,
DocumentsComponent,
HomeComponent
],
imports: [
CommonModule,
HttpModule,
FormsModule,
RouterModule.forRoot([
{ path: '', redirectTo: 'home', pathMatch: 'full' },
{ path: 'home', component: HomeComponent },
{ path: 'documents', component: DocumentsComponent },
{ path: '**', redirectTo: 'home' }
])
]
})
export class AppModuleShared {
}
我在每个文档上都有一个链接,因此当您单击它时,您会从列表/documents 转移到例如。 /documents/1
当我点击一个链接时,它只会在那里停留足够长的时间,所以我可以看到 URL 的变化,然后它会转到默认的后备 /home。
在 Startup.cs 我设置了默认路由处理:
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
routes.MapSpaFallbackRoute(
name: "spa-fallback",
defaults: new { controller = "Home", action = "Index" });
});
据我所知,“默认”地图路线应该选择/documents/1,但事实并非如此。我什至从未到达路由的后端方法。
[Produces("application/json")]
[Route("api/[controller]")]
public class DocumentsController : Controller
{
private readonly DatabaseContext _context;
public DocumentsController(DatabaseContext context)
{
_context = context;
}
// GET: api/Documents
[HttpGet]
public IActionResult GetDocuments()
{
// returns a JSON list of documents, works fine
}
// GET: api/Documents/5
[HttpGet("{id}")]
public async Task<IActionResult> GetDocument([FromRoute] int id)
{
//returns the specified document, is never even called
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
var document = await _context.Documents.SingleOrDefaultAsync(m => m.Id == id);
if (document == null)
{
return NotFound();
}
return Ok(document);
}
我需要做什么才能让特定路线发挥作用?
【问题讨论】:
-
你需要为 document/id 定义一个路由器
标签: c# routes angular2-routing asp.net-mvc-routing asp.net-core-2.0