【发布时间】:2015-12-10 15:22:17
【问题描述】:
我有一个 MVC 解决方案,其中包含一个 ServiceStack API 以及一个调用 API 服务的 MVC UI。其中一些服务是 AutoQuery GET 端点,我遇到了一个问题,即 ServiceStack 服务会在我调用服务时获取已发布的表单值或不相关的查询字符串值并引发参数错误。
我尝试了多种调用服务的方法:
using (var fooSvc = new HostContext.ResolveService<FooService>(HttpContext))
{
var foos = (QueryResponse<Foo>)fooSvc.Get(new Foos());
// Do stuff here
}
没有骰子。发布的表单值搞砸了,我在我的服务中收到System.FormatException 说Input string was not in a correct format:
var q = AutoQuery.CreateQuery(request, Request.GetRequestParams());
所以我尝试了:
var foos = (QueryResponse<Foo>)HostContext.ServiceController.Execute(new Foos());
在这种情况下,我收到 System.NotImplementedException 说它找不到 Post(Foos) 或 Any(Foos)(有问题的电话是 GET)。
我确定我只是遗漏了一些东西。 Mythz,又有救我了吗?
编辑:我手动输入了该代码...最初的块有AutoQuery,而我的意思是QueryResponse...
编辑 2:这是我的 AutoQuery 服务的一般结构。这些都是服务上的GET,因为这些端点还需要支持POST 才能创建资源。例如,我的 URI 可能位于 http:/service.com/api/users,并且希望能够使用 AutoQuery 或 POST 使用 GET 来创建新用户。
[Authenticate]
public class UsersService : Service
{
public IAutoQuery AutoQuery { get; set; }
public object Get(Users request)
{
var q = AutoQuery.CreateQuery(request, Request.GetRequestParams());
// Here I add some other conditions to the query object to filter results based on the user's role, etc.
return AutoQuery.Execute(request, q);
}
[RequiredRole("Admin")]
public object Post(CreateUser request)
{
var user = request.ConvertTo<User>();
Db.Save(user);
return user;
}
}
【问题讨论】:
标签: c# asp.net-mvc servicestack