繁体   English   中英

aspnetcore 路由到 controller 操作与自定义路由

[英]aspnetcore routing to controller action with custom route

我有一个 controller “ServicesController”,其中“编辑”操作采用一个字符串参数“serviceId”。

此 controller 应用了如图所示的路由并按预期工作。

[Route("Services/Edit/{id}")]
public async Task<IActionResult> EditService(string id)
{
    Service s = await _servicesService.GetService(id);
    return View("EditService", s);
}

当我尝试从另一个操作重定向到此路由时,我只能获取显示为查询的值

return RedirectToAction("Edit", new { id = s.Id });
// redirects to /Services/Edit?id=exampleid

我搜索了一些相关的答案,人们问了同样的问题,但建议的解决方案对我不起作用,假设是因为我的动作可能有路线装饰?

我也尝试了以下方法,但重定向到带有 id 的调用操作

[Route("Services/Foo/{serviceId}")]
public async Task<IActionResult> Foo(string serviceId)
{
    // redirects to /Services/Foo/exampleid
    return RedirectToRoute("Edit", serviceId);
}

我哪里错了?

RedirectToAction的第一个参数是actionName ,它是方法的名称,在我们的例子中应该是EditService 这是文档的链接。 所以,我相信正确的版本应该是这样的:

return RedirectToAction("EditService", new { id = s.Id });

它还有一个重载版本RedirectToAction(string actionName, string controllerName, object routeValues) ,它允许指定 controller 以防您不在同一个 Z594C103F2C6E04C103D8AB059C1AZ 内重定向。

关于RedirectToRoute ,它接受路由的名称,为此我们需要为我们的EditService(string id)操作设置名称,如下所示:

[Route("Services/Edit/{id}", Name = "MyEditServiceRoute")]
public async Task<IActionResult> EditService(string id)
{
    ...
}

...

{
    ...
    return RedirectToRoute("MyEditServiceRoute", serviceId);
}

代替:

return RedirectToAction("Edit", new { id = s.Id });

尝试:

return EditService( s.Id );

尝试使用路由上的“名称”属性为路由指定一个明确的名称。

[Route("Services/Edit/{id}", Name="EditService")]

然后在重定向上提供该特定名称:

return RedirectToAction("EditService", new { id = s.Id });

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM