在我的jQuery XHR(从$ .get()调用创建)的done处理程序中是否存在一种方法来查找响应中的问题,然后使用自定义错误消息触发已注册的后续处理程序(谎言失败并始终)?
这样的事情:
$.get( URL )
.done(
function (data, status, res) {
if(/*some condition*/){
this.Reject(res, status, "some reason");
return
}
//Do stuff on success
}
)
.fail(
//Common error handler here
)
.always(
//common always handler here
);
Run Code Online (Sandbox Code Playgroud)
完成后的二次过滤器.原因当然是所有的API在200响应中推送错误,jQuery永远不会知道这是一个错误.
我有一个ASP.NET MVC 4应用程序,我正在将OData API合并到其中.这是运行具有更大OData支持的2012.2内容.
我没有使用单独的区域...这可能是一个错误,但我的应用程序很小,区域似乎有点过分.
我的控制器设置正确,我的Segments集合的示例路径(段是我的域中的类型)是"/ odata/Segments".这按预期加载并正在工作.
在我的主页我想要的链接添加到使用Razor的Html.ActionLink(或RouteLink)这个资源,但它似乎OData的控制器布局确实与这些方法并不完全工作,因为在注册时,控制器与"OData的"前缀WebAPIConfig:
config.Routes.MapODataRoute("OData Route", "odata", model );
Run Code Online (Sandbox Code Playgroud)
我可以通过假装有一个odata控制器来欺骗该方法来构造正确的url,当时肯定没有一个(据我所知)这样的东西:
@Html.RouteLink("Segments", "Segments", "odata")
Run Code Online (Sandbox Code Playgroud)
但这似乎是一个黑客.
我不太了解ASP.NET路由管道,足以理解传递给MapODataRoute的前缀如何被合并到MVC链中,这样我就可以使用"正确"的剃刀方法"正确".
只是为了踢,这是我的SegmentsController:
public class SegmentsController : EntitySetController<Segment, long>
{
private MarketerDB db = new MarketerDB();
// GET api/segments
override public IQueryable<Segment> Get()
{
return db.Segments.AsQueryable();
}
protected override Segment GetEntityByKey(long key)
{
return db.Segments.Find(key);
}
public IQueryable<Affiliate> GetAffiliates([FromODataUri] long key)
{
return this.GetEntityByKey(key).Affiliates.AsQueryable();
}
protected override void Dispose(bool disposing)
{
db.Dispose();
base.Dispose(disposing);
}
}
Run Code Online (Sandbox Code Playgroud) 我的控制器中有以下内容:
@RequestMapping
@ResponseBody
public HttpEntity<PagedResources<PromotionResource>> promotions(
@PageableDefault(size = RestAPIConfig.DEFAULT_PAGE_SIZE, page = 0) Pageable pageable,
PagedResourcesAssembler<Promotion> assembler
){
PagedResources<PromotionResource> r = assembler.toResource(this.promoService.find(pageable), this.promoAssembler);
return new ResponseEntity<PagedResources<PromotionResource>>(r, HttpStatus.OK);
}
Run Code Online (Sandbox Code Playgroud)
如果我导航到映射到该控制器方法的URL,则会收到500错误,其根本原因是:
com.sun.istack.internal.SAXException2: unable to marshal type "commerce.api.rest.resources.PromotionResource " as an element because it is missing an @XmlRootElement annotation
Run Code Online (Sandbox Code Playgroud)
如果我在资源上抛出@XmlRootElement批注,则会出现此错误:
com.sun.istack.internal.SAXException2: unable to marshal type "commerce.api.rest.resources.PromotionResource " as an element because it is not known to this context.
Run Code Online (Sandbox Code Playgroud)
如果accept标头是application / json或application / hal + json,那么一切都很好。仅当客户端(在本例中为chrome)正在寻找application / xml时才引起问题(这在HATEOAS遵循客户端请求时才有意义。我使用的是Spring Boot的@EnableAutoConfiguration,它将XML消息转换器添加到列表中从而启用XML内容类型。
我猜我至少有2个选择:1.修复jaxb错误2.删除xml作为受支持的内容类型
不知道该怎么做,或者还有另一种选择。
假设这是我的视图模型
function VM()
{
var self = this;
this.Status = ko.observable(false);
this.A = ko.observable();
this.B = ko.computed(
function()
{
return self.A();
}
).extend( throttle: 200 );
this.B.subscribe(
function()
{
self.Status(true);
setTimeout( //ajax simulation
function(){
self.Status(false);
}
,200)
}
);
}
Run Code Online (Sandbox Code Playgroud)
我想要一个测试来验证状态在true和false之间切换,因为A已设置但我无法通过VM的双异步性质.有没有办法用多个stop()/ start()调用来测试它?
我正在尝试在另一个环境中模拟现有的Web服务以进行测试,并遇到了障碍.
我正在尝试在WCF中创建这个Mock服务
我正在嘲笑的服务(在WCF中没有开发)有一个具有这种类型定义的实体:
<xs:sequence>
<xs:element maxOccurs="unbounded" minOccurs="0" name="dog" nillable="true" type="xs:string"/>
</xs:sequence>
Run Code Online (Sandbox Code Playgroud)
注意maxOccurs ="unbounded"消息本身看起来像这样:
<dog>1</dog>
<dog>2</dog>
Run Code Online (Sandbox Code Playgroud)
但我无法弄清楚如何定义我的DataContract来处理这个问题.我假设只使用如下数组类型:
[DataContract]
public class P56040Input
{
[DataMember]
public string[] dog { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
会对应,但它会对新类型(arrayofstring)做出意想不到的事情:
<xs:sequence>
<xs:element xmlns:q1="http://schemas.microsoft.com/2003/10/Serialization/Arrays" minOccurs="0" name="dog" nillable="true" type="q1:ArrayOfstring"/>
</xs:sequence>
Run Code Online (Sandbox Code Playgroud)
这甚至可以在WCF中进行模拟吗?
这可能是邪恶的做法,但为了在我们的 azure 数据库中设置托管身份,我们使用 null_resource,如下所示:
\n\n# https://www.terraform.io/docs/providers/null/resource.html\n# This technique was stolen from /sf/answers/3816637401/\nresource "null_resource" "create-sql-user" {\n\n triggers = {\n db = azurerm_sql_database.x.id\n }\n\n # https://www.terraform.io/docs/provisioners/local-exec.html\n provisioner "local-exec" {\n\n # https://learn.microsoft.com/en-us/powershell/module/sqlserver/Invoke-Sqlcmd?view=sqlserver-ps\n # Adding the Managed Identity to the database as a user and assign it the roles of db_datareader and db_datawriter\n # NOTE: This is using the executing users credentials to connect to the db, this may not work if this is executed from a service principal within a devops pipeline\n …Run Code Online (Sandbox Code Playgroud) .net ×1
asp.net ×1
jquery ×1
knockout.js ×1
odata ×1
powershell ×1
qunit ×1
razor ×1
spring-boot ×1
terraform ×1
unit-testing ×1
wcf ×1
wsdl ×1
xml ×1
xsd ×1