1

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

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

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

有任何想法吗?

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

4

1 回答 1

2

为了使用ServiceStack.Razor 的 No Ceremony 选项,您可以在不需要 ServiceStack 服务的情况下返回动态 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; }
}

您的服务可以只返回相同的请求 DTO,例如:

public object Get(ViewAccount request) => request;

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

/Views/ViewAccount.cshtml

与模型:

@model ViewAccount

注意:通常不建议/get在路由中使用,这通常通过 HTTP GET 请求来区分,因此我建议删除get并仅具有:

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

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

[Route("/account/view/{Id}", "GET")]
于 2017-06-02T17:13:23.120 回答