我有复杂的requstDto,它由其他DTO列表(实体框架实体)组成,如
[Route("/demoservice/{UserName}/{EmployerID}/{Report}/{selectedDataList}/", "POST")]
public class ReportDemo : IReturn<String>
{
public string UserName { get; set; }
public int EmployerID { get; set; }
public UserReport Report { get; set; }
public List<selectedidList> selectedDataList{ get; set; }
}
跟随UserReport
public class UserReport
{
public string UserName { get; set; }
public Datetime CreatedON{ get; set; }
}
当我尝试发帖请求时,它会给我以下错误
从客户端检测到潜在危险的Request.Path值(:)
我认为它会导致错误:在CreatedON字段中(对于时间部分)。
帖子值是否也通过URL发送到ServiceStack URL?如果是的话
1)如果我们有非常大且复杂的requestDTO会导致URL中包含大量字符(大于允许值),该怎么办?
2)如何使上述场景工作为&#34;:&#34;是保留的,不能通过URL发送?
3)如何查看请求URL从客户端生成?
我在MVC.net中的客户端代码是
var client = new JsonServiceClient(ConfigurationManager.AppSettings["applicationUrl"])
{
//for windows authentication
Credentials = CredentialCache.DefaultCredentials
};
var result = client.Post (new ReportDemo
{
UserName = userReportViewModel.UserName,
EmployerID = userReportViewModel.EmployerID,
Report = userReportViewModel.Report,
selectedDataList =userReportViewModel.selectedDataList
});
提前致谢, AMOL
答案 0 :(得分:2)
只应在/path/info
中指定网址的[Route]
。理想情况下,路由应使用人类可读的逻辑结构Url,该Url引用“资源”(名词)。有关不同的示例,请参阅SeviceStack REST Events Example。
路由还应从不包含复杂类型,并且[Route]
中不存在的任何变量会自动发送到POST
请求的HTTP请求正文或来自的{Query} GET
请求。
对于像这样的用户报告,我会选择一个标识报告的URL,如果报告的名称类似于“演示报告”,我会使用路径信息,如:
[Route("/reports/demo")]
public class ReportDemo : IReturn<String> { ... }
否则,如果这是针对用户的报告,您可能希望使用以下内容:
[Route("/users/{UserName}/reports/demo")]
public class ReportDemo : IReturn<String> { ... }
您可以使用Reverse Routing扩展方法检查使用的网址,例如:
var request = ReportDemo { UserName = "Foo", ... };
request.ToPostUrl().Print(); //= /users/Foo/reports/demo
现在您可以将您的请求发送给不在路由获取POST的任何属性到上面的URL,例如:
string result = client.Post (new ReportDemo {
UserName = userReportViewModel.UserName,
EmployerID = userReportViewModel.EmployerID,
Report = userReportViewModel.Report,
selectedDataList =userReportViewModel.selectedDataList
});
如果您的报告确实返回string
,则可以使用IReturn<string>
但是如果它返回了响应DTO,则您需要使用它,例如IReturn<ReportDemoResponse>
。