不执行服务返回视图
现在我们有很多虚拟MVC控制器可以通过web组件(vuejs)返回简单的视图。 我试图重构这个,看看我们是否可以使用无控制器的razor插件,但我不想在浏览器请求路由时执行实际的服务逻辑,因为组件已经这样做了。 一个例子:
/account/edit/1
是一个标准的MVC控制器 - >与一个类似于<account edit="1" />
的视图相关联,该视图对/api/account/get/1
调用/api/account/get/1
。 我想添加Service Stack Razor引擎,以便我们可以使用:
/api/account/get/1
(我们将删除api部分或添加备用路由),但这不会执行逻辑,但会执行安全属性,因此我们可以删除不使用的标准MVC控制器。 我知道我们可以为此添加不同的服务,但我宁愿使用相同的端点,只是不执行它,但返回剃须刀。
有任何想法吗?
不是我想听到的答案,但基本上我们不能做我们想做的,相反,我们将创建一些虚拟服务堆栈服务来返回仍然消除控制器的正确视图。
为了使用ServiceStack.Razor的No Ceremony选项,您可以在不需要ServiceStack服务的情况下返回动态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;
这将是公约将能够处理剃刀视图位于:
/Views/ViewAccount.cshtml
使用该模型:
@model ViewAccount
注意:通常不建议拥有/get
路由,这通常是通过HTTP GET请求区分的,所以我建议删除get
并只是:
[Route("/account/{Id}", "GET")]
或者,如果您希望为Razor视图指定单独的路径,则可以使用HTTP Verb以外的其他内容,这可能会造成混淆,IMO 视图更适合HTML页面,例如:
[Route("/account/view/{Id}", "GET")]
链接地址: http://www.djcxy.com/p/65517.html