ServiceStack 无控制器 Razor 视图 - Return 不执行服务的视图

ServiceStack Controllerless Razor Views - Return view without executing service

现在我们有很多虚拟 MVC 控制器,return 带有 Web 组件 (vuejs) 的简单视图。我正在尝试重构它以查看我们是否可以使用无控制器剃须刀插件,但我不想在浏览器请求路由时执行实际的服务逻辑,因为组件已经这样做了。一个例子:

/account/edit/1 是一个标准的 MVC 控制器 -> 与具有类似 <account edit="1" /> 的视图相关联,该视图对 /api/account/get/1 进行 ajax 调用。我想添加 Service Stack Razor 引擎,这样我们就可以使用:

/api/account/get/1(我们将删除 api 部分或添加备用路由)这不会执行逻辑但会执行安全属性,因此我们可以删除标准 MVC 控制器'被使用。我知道我们可以为此添加不同的服务以使其正常工作,但我更愿意使用相同的端点并且只是不执行它但 return 剃刀。

有什么想法吗?

不是我想听到的答案,但本质上我们不能做我们想做的,相反,我们将创建一些虚拟服务堆栈服务来 return 仍然消除控制器的正确视图。

为了在不需要 ServiceStack 服务的情况下 ServiceStack.Razor's No Ceremony Option 使用 return 动态 Razor 视图,您的路线需要与 Razor 页面相匹配,这样您就不会拥有如下路线:

/account/get/1

因为这需要一个 Razor 内容页面:

/account/get/1.cshtml

您可以将它添加到 queryString 中,例如 /account/get?id=1,这样您就可以拥有一个 Razor 内容页面,例如:

/account/get?id=1

如果你想处理 /account/get/1 你需要一个处理该路由的服务,例如:

[Route("/account/get/{Id}", "GET")]
class ViewAccount 
{
    public int Id { get; set; }
}

您的服务可以 return 相同的请求 DTO,例如:

public object Get(ViewAccount request) => request;

约定能够处理位于以下位置的 Razor 视图:

/Views/ViewAccount.cshtml

搭配模特:

@model ViewAccount

注意:通常不建议在路由中包含 /get,这通常由 HTTP GET 请求区分,因此我建议删除 get 并只包含:

[Route("/account/{Id}", "GET")]

或者,如果您想要 Razor 视图的单独路由,请使用 HTTP 动词以外的其他内容,这可能会造成混淆,IMO view 更适合 HTML 页面,例如:

[Route("/account/view/{Id}", "GET")]