使用ServiceStack 4.0.33并给出以下简化的DTO ......
[Route("/products")]
[Route("/products/{Id}")]
public class Product : IReturn<ProductResponse>
{
[PrimaryKey]
public string Id { get; set; }
public string Description { get; set; }
}
public class ProductResponse
{
public Product Product { get; set; }
}
使用以下简化服务...
public class ProductService : Service
{
public object Post(Product product)
{
Db.Insert<Product>(product);
return new ProductResponse() { Product = product };
}
}
并在ProductsController
using (var productService = ResolveService<ProductService>())
{
var result = productService.Post(product);
if (result.IsErrorResponse())
return View(product);
else
return RedirectToAction("Index");
}
如果我尝试发布一个有意复制主键的新产品,我会得到一个500错误的HTML样式页面而不是ResponseStatus
来填充并返回...
我见过很多不同的StackOverflow帖子,说明ResponseStatus
不会填充的不同原因,但我尝试了几件事无济于事。我错过了什么(希望很简单)?
答案 0 :(得分:0)
您在哪里定义重复键的处理方式与HTTP 500不同的行为。您期望的其他响应是什么? ResponseStatus可以包含HTTP 500,它仅表示服务器端错误。
你必须明确地定义你想要以不同方式处理错误,如果是这样,你需要什么类型的错误(哪个错误代码,哪个消息)解释为here。
例如:
public object Get(User request)
{
throw HttpError.NotFound("User {0} does not exist".Fmt(request.Name));
}
查看ServiceStack教程了解更多信息。
答案 1 :(得分:0)
您收到的错误页面是自定义ASP.NET错误页面,它劫持了您的ASP.NET Web应用程序返回的任何自定义500 HTTP错误响应。
可以通过以下方式禁用它:
<system.web>
...
<customErrors mode="Off" />
</system.web>
<system.webServer>
<httpErrors errorMode="Detailed" />
</system.webServer>
这是设置TrySkipIisCustomErrors = true
的另一个alternative of disabling IIS errors,可以在ServiceStack中设置:{/ p>
GlobalRequestFilters.Add((req, res, dto) =>
{
((HttpResponse)res.OriginalResponse).TrySkipIisCustomErrors = true;
});