我有一个复杂的requestDto,它由其他DTO(实体框架实体)列表组成,如
[Route("/demoservice/{Userdemo}/{EmployerDemoid}/{ReportDemo}/{DemoselectedDataList}/", "POST")]
public class ReportDemo : IReturn<String>
{
public List<selectedidList> selectedDataList{ get; set; }
}
其中UserReport跟在后面
public class UserReport
{
public string UserName { get; set; }
public Datetime CreatedON{ get; set; }
}
当我尝试发布请求时,它给我以下错误
从客户端(:)检测到具有潜在危险的Request.Path值
我认为它给出错误是由于:(对于时间部分)。
发布值是否也通过URL发送到ServiceStack URL?如果是
1)如果我们有非常大且复杂的requestDTO,导致URL中出现大量字符(超过允许的字符数),该怎么办?
2)如何使上述方案的工作,因为“:“是保留的,不能通过URL发送?
3)如何查看从客户端生成的请求URL?
我在www.example.com中的客户代码MVC.net为
var client = new JsonServiceClient(ConfigurationManager.AppSettings["applicationUrl"])
{
//for windows authentication
Credentials = CredentialCache.DefaultCredentials
};
var result = client.Post (new ReportDemo
{
UserName = model.UserName,
EmployerID = model.EmployerID,
Report = model.Report,
selectedDataList =userReportViewModel.selectedDataList
});
先谢谢你了阿莫尔
1条答案
按热度按时间hl0ma9xz1#
在
[Route]
中只应指定URL的/path/info
。理想情况下,路由应使用引用“资源”(名词)的可读逻辑结构URL。有关不同示例,请参见SeviceStack REST Events Example。路由还应该永远不包括复杂类型,任何不在
[Route]
上的变量都会自动在POST
请求的HTTP请求主体中发送,或者在GET
请求的QueryString中发送。对于这样的用户报告,我会选择一个标识报告的URL,如果报告的名称类似于“Demo Report”,我会使用如下路径信息:
否则,如果这是用户报告,您可能需要使用类似以下内容:
您可以通过使用反向路由扩展方法检查使用的url,例如:
现在您可以发送您的请求与任何属性不在路线获取POST'艾德到上述网址,例如:
如果您的报告确实返回
string
,则可以使用IReturn<string>
,但是如果它返回响应DTO,则需要使用该响应DTO,例如IReturn<ReportDemoResponse>
。