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")]
现在我们有很多虚拟 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")]