ASP.NET Core 2.0 URL

时间:2018-11-08 11:07:25

标签: c# asp.net-core asp.net-core-mvc

我正在开发一个大型ASP.NET Core 2 Web应用程序,但是我仍然对URL感到困惑。

拳头学习时,我以为URL是View的名字,但发现它们来自Controller方法。

以下是传达我的问题的示例:

我有一个名为 Daysheet 的控制器方法,该方法返回具有相同名称的视图和模型。

在“工作表”视图中,我从Javascript调用了各种控制器方法来执行特定操作。其中之一称为 AssignStaff ,它带有两个整数参数。

在AssignStaff方法中,我再次返回带有模型的Daysheet视图,但是现在我的URL是“ AssignStaff”!

我不能仅仅进行重定向,因为整个Daysheet模型没有传递给AssignStaff方法。

在很多情况下,调用一个动作后,我会得到另一个我不想要的URL。

更新/编辑

如果我的解释令人困惑,谢谢您的帮助和歉意。我只是有一个使用模型的名为 Daysheet 的视图。我想调用各种控制器方法来执行各种操作,但是我希望停留在“日程表”视图/ URL中。

如上所述,我不能只是重定向,因为在操作方法中,我不再从 Daysheet 视图获得整个模型。另外,如果我重定向,则无法传递整个模型,因为这会导致报头过长的错误。我认为我唯一的选择可能是使用ajax进行操作,以使URL不变。

2 个答案:

答案 0 :(得分:3)

当您仅在Controller Action中返回Return View(“”)名称时,URL将是您正在使用的Action的名称。

如果您想重定向到某些特定的操作,这将有助于确保Url与您所在的位置匹配。您可能想详细了解here

为此,请使用:

RedirectToAction()

答案 1 :(得分:0)

您的应用程序响应的URL被称为“路由”,它们是按照惯例创建的或是明确创建的。当然,默认是约定,它是/{controller=Home}/{action=Index}形式的URL。如果忽略路由的那部分,则Index是默认操作,因此对/foo的请求将按照惯例映射到FooController.IndexHomeController是默认控制器,因此按照惯例,空路径(例如http://sample.com)将调用HomeController.Index

Razor Pages有其自己的约定。它们确实遵循文件系统,但是排除了路径的Pages部分。因此,像Pages/Foo/MyRazorPage.cshtml这样的Razor Page将在/Foo/MyRazorPage下加载。

有一个Route属性,它允许您指定完全自定义的路由。该属性可以应用于控制器类以及该类中的各个动作。例如:

[Route("foo")]
public class MyAwesomeController
{
    [Route("bar")]
    public IActionResult MyAwesomeAction()
    {
        return View();
    }
}

这样,对/foo/bar的请求实际上将调用MyAwesomeController.MyAwesomeAction