我有几个与使用ServiceStack的REST服务实现相关的问题.
对于GET操作,我将请求DTO定义如下:
[Route("/Customer/{ID}", Verbs = "GET")]
public class GetCustomer : IReturn<GetCustomerResponse>
{
....
....
}
Run Code Online (Sandbox Code Playgroud)这里"GetCustomer"是请求DTO,"GetCustomerResponse"是响应DTO.但是对于PUT/POST/DELETE操作,我只需要知道操作是否成功提交,如果'不'那么什么是异常.那么对于POST/PUT/DELETE我的请求dto定义应该是什么?它应该使用IReturnVoid,如下所示?
[Route("/Customer/{ID}", Verbs = "DELETE")]
public class DeleteCustomer : IReturnVoid
{
....
....
}
Run Code Online (Sandbox Code Playgroud)
如果我必须使用IReturnVoid,那么如何检索提交我的操作时可能发生的任何异常信息?
在服务堆栈的错误处理文档中,它是写的,我在下面引用
错误响应类型
抛出异常时返回的错误响应取决于是否存在常规命名的{RequestDto}响应DTO.
如果存在:
无论服务方法的响应类型如何,都会返回{RequestDto}响应.如果{RequestDto}响应DTO具有ResponseStatus属性,则会填充它,否则将不返回ResponseStatus.(如果您使用[DataContract]/[DataMember]属性修饰了{ResponseDto} Response类和属性,则还需要对ResponseStatus进行修饰以填充().
否则,如果不是:
返回一个通用的ErrorResponse,其中包含一个填充的ResponseStatus属性.
服务客户端透明地处理不同的错误响应类型,对于无模式格式(如JSON/JSV/etc),在自定义或通用ErrorResponse中返回ResponseStatus之间没有实际的明显区别 - 因为它们都在线路上输出相同的响应.
我从上面得到的是我的服务实现中的Delete方法的返回类型是什么?如何在不定义删除响应DTO的情况下实现我的删除方法但是我能够检索"ErrorResponse"n异常信息?
路线:
[Route("/DeleteCustomer/{ID}", Verbs = "DELETE")]
public class DeleteCustomer : IReturn<DeleteCustomerResponse>
{
public int ID { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
方法实施:
public DeleteContactResponse Delete(DeleteContact request)
{
.....
}
Run Code Online (Sandbox Code Playgroud)
但每当我使用我的客户端调用此删除时,我总是得到"NotFound"异常.我尝试了不同的客户端但是我得到了404错误.
与Servicestack文档一起提供的参考链接之一可以重复使用"GET"和"DELETE"动词.
另一个链接表明并非所有浏览器都支持删除操
所以我想知道如何实现删除操作?
我有一个表有四列,即代码,名称,数量和价格.其中,我想动态更改Quantity列的内容/元素.通常,它应该显示元素中显示的数量,当用户点击元素时,我想显示元素,以便用户可以编辑数量.我正试图在这个淘汰文档链接上按照"示例2"实现.
以下是我的代码:
页面视图模型
function OrderVM (vm) {
var self = this;
self.OrderNo= ko.observable(vm.OrderNo());
.....
.....
self.OrderedProducts = ko.observableArray([]);
for (i = 0; i < vm.OrderedProducts().length; i++) {
var p = new ProductVM(vm.OrderedProducts()[i]);
self.OrderedProducts.push(p);
}
.....
}
function ProductVM(vm) {
var self = this;
self.Code = ko.observable(vm.Code());
self.Name = ko.observable(vm.Name());
self.Quantity = ko.observable(vm.Quantity());
self.Price = ko.observable(vm.Price());
self.IsEditing = ko.observable(false);
this.edit = function () {
self.IsEditing(true);
}
}
Run Code Online (Sandbox Code Playgroud)
在我的Razor视图中,我有以下代码:
<tbody data-bind="foreach:OrderedProducts">
<tr>
<td class="lalign"><span data-bind="text:Code"/></td>
<td class="lalign"><span data-bind="text:Name" …Run Code Online (Sandbox Code Playgroud)