我需要HTTP POST一个复杂的类型到Web服务(我无法控制).我相信Web服务是使用旧版本的ASP.NET MVC构建的.它模型绑定格式为的有效负载form-url-encoded.
如果我在它上面开火,那就完美了.如您所见,我手动创建了一组键/值对.
var values = new List<KeyValuePair<string, string>>
{
new KeyValuePair<string, string>("Username", "some-username"),
new KeyValuePair<string, string>("Password", "some-password"),
new KeyValuePair<string, string>("Product", "some-product")
};
var content = new FormUrlEncodedContent(values);
var response = new HttpClient().PostAsync(url, content).Result;
Run Code Online (Sandbox Code Playgroud)
但我不想这样做,我只想发送复杂的类型,如果可以的话.
var content = new ComplexType("some-username", "some-password", "some-product");
var response = new HttpClient().PostAsync(url, content).Result;
Run Code Online (Sandbox Code Playgroud)
我相信曾经有一个HttpRequestMessage<T>但是已经被抛弃了
HttpClient.PostAsJsonAsync<T>(T value) sends “application/json”
HttpClient.PostAsXmlAsync<T>(T value) sends “application/xml”
但是我不想发送Json或者XML我想发送form-url-ecncoded而没有将复杂类型转换为键/值对集合的麻烦.
基本上我也想知道 Jaans提出的这个问题的答案 (他是对第二个答案的第二个评论).
任何人都可以提出建议.
我有这样的架构:
class Schemas
constructor: ->
@mongoose = require 'mongoose'
@schema = @mongoose.Schema
@EmployeeSchema = new @schema
'firstname': { type: String, required: true },
'lastname': { type: String, required: true },
'email': { type: String, required: true, index: { unique: true }, validate: /\b[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}\b/ },
'departmentId': { type: @schema.ObjectId, required: true }
'enddate': String,
'active': { type: Boolean, default: true }
@EmployeeSchemaModel = @mongoose.model 'employees', @EmployeeSchema
@DepartmentSchema = new @schema
'name': { type: String, required: true, index: { unique: true } …Run Code Online (Sandbox Code Playgroud) 我开始进行单元测试并尝试做一些TDD.我已经阅读了很多关于这个主题的内容,并写了一些测试.我只是想知道以下是否是正确的方法.
我想在我的网站上添加通常的"联系我们"设施.你知道的事情,用户用他们的电子邮件地址填写表格,输入一条简短的信息,然后按一个按钮发回表格.
模型绑定器执行它们的操作,我的操作方法接受发布的数据作为模型.然后,操作方法将解析模型并使用smtp向网站管理员发送电子邮件,让他/她填写有人在其网站上填写联系表单.
现在问题....为了测试这个,我是否正确创建一个接口IMessageService,它有一个方法Send(emailAddress,message)来接受电子邮件地址和消息体.在具体类中实现接口,让该类处理smtp的东西并实际发送邮件.
如果我将接口作为参数添加到我的控制器构造函数中,那么我可以使用DI和IoC将具体类注入控制器.但是在进行单元测试时,我可以创建我的IMessageService的伪造或模拟版本并对其进行断言.
我问的原因是我看过其他人为SmtpClient生成接口然后嘲笑它的例子.真的有必要走那么远,还是我不理解这些东西?
我的 karma.conf.js 文件如下所示:
// Karma configuration
// Generated on Tue Jun 11 2013 14:14:12 GMT+0100 (GMT Daylight Time)
// base path, that will be used to resolve files and exclude
basePath = '';
// list of files / patterns to load in the browser
files = [
JASMINE,
JASMINE_ADAPTER,
'../Scripts/angular/angular.js',
'../Scripts/angular/restangular/underscore-min.js',
'../Scripts/angular/restangular/restangular-min.js',
'../Scripts/angular/angular-*.js',
'../Scripts/angular/angular-test/angular-*.js',
'../Scripts/angular/angular-ui/*.js',
'../Scripts/angular/angular-strap/*.js',
'../Scripts/angular/angular-http-auth/*.js',
'../uifw/scripts/ui-framework-angular.js',
'../app/app.js',
'../app/**/*.js',
'unit/**/*.js'
];
// list of files to exclude
exclude = [
'../Scripts/angular/angular-test/angular-scenario.js'
];
preprocessors = {
'**/../app/**/*.js': 'coverage'
};
coverageReporter …Run Code Online (Sandbox Code Playgroud) 在Javascript中,我有一个User包含对象数组的department对象,如下所示:
user =
{
departments: [
{id: 1, name: 'Department 1'},
{id: 2, name: 'Department 2'},
{id: 3, name: 'Department 3'}
]
}
Run Code Online (Sandbox Code Playgroud)
使用jquery模板(版本1.4.2)我想渲染一个<select>标签,如下所示:
<select name="departmentId" id="department">
{{each departments}}
<option value="{{= id }}">{{= name }}</option>
{{/each}}
</select>
Run Code Online (Sandbox Code Playgroud)
这不会在选项元素中生成任何值.如何使用模板访问每个部门对象的id和name属性.
我有以下测试:
[Test]
public void Add_New_Group_Should_Return_StatusCode_Created_And_A_Header_Location_To_The_New_Group()
{
var newGroup = new GroupData { ID = 1, UserID = 1, Name = "Group 1", Description = "Description 1" };
var fakeGroupDAL = A.Fake<IGroupDAL>();
var contactGroupsController = new ContactGroupsController(fakeGroupDAL);
SetupControllerForTests(contactGroupsController, HttpMethod.Post);
var response = contactGroupsController.AddGroup(new ContactGroupApiRequest(), newGroup);
Assert.IsTrue(response.StatusCode == HttpStatusCode.Created, "Should have returned HttpStatusCode.Created");
}
Run Code Online (Sandbox Code Playgroud)
其中调用以下配置方法:
private static void SetupControllerForTests(ApiController controller, HttpMethod httpMethod)
{
var config = new HttpConfiguration();
var request = new HttpRequestMessage(httpMethod, "http://localhost/contactgroups");
var route = config.Routes.MapHttpRoute("ContactGroupsApi", "{controller}/{action}/{request}", new { request …Run Code Online (Sandbox Code Playgroud) 我对仿制药很新,所以我想知道是否有人可以解释我遇到的以下问题.在ASP.NET MVC应用程序中的几乎所有控制器中,我都需要返回一个已过滤的列表(在用户指定某些过滤条件的情况下填充JqGrid).每个控制器列表方法将返回一个不同的IQueryable列表,所以我开始创建一个通用方法来处理它.
当我创建我的方法时,我在特定的控制器中定义它.一切都编译好了,我得到了我期望的结果.因为我想从我的所有控制器调用这个方法,我假设我可以简单地创建另一个静态类,将方法放在那里,然后从我的所有控制器调用该方法.但是,如果我尝试将方法移动到调用它的控制器以外的任何其他位置,编译器会抱怨该方法的最后一行,并出现以下错误:
System.Linq.Queryable.Where<TSource>(System.Linq.IQueryable<TSource>,
System.Linq.Expressions.Expression<System.Func<TSource,bool>>)
无法从用法中推断出方法的类型参数.尝试显式指定类型参数.
public static IQueryable<T> FilteredList<T>(IQueryable<T> list, string filters)
{
var qb = new QueryBuilder<T>();
var whereClause = qb.BuildWhereClause(filters);
return list.Where(whereClause);
}
Run Code Online (Sandbox Code Playgroud)
我试着list<T>.Where(whereClause)和list.Where<T>(whereClause)和几乎所有其他的组合,我要去哪里错了,谁能给我解释一下.
我有非常简单的骨干模型和集合.我有一个相应的backbone.marionette.CollectionView和backbone.marionette.ItemView,他们住在backbone.marionette.region.
ItemView模板包含"删除"按钮.remove按钮的click事件发出model.destroy().向后端发出HTTP DELETE,但它似乎发出两次,因为第二次失败,该项目不会从集合中删除.
其他一切工作正常,只发出两次HTTP DELETE.知道为什么吗?
我正在使用Backbone.Marionette版本v0.4.5
# Model:
class User extends Backbone.Model
idAttribute: "_id"
# Collection
class Users extends Backbone.Collection
model: app.User
url: "/someUrl/Users"
# CollectionView
class UserListView extends Backbone.Marionette.CollectionView
tagName: "ul",
itemView: app.UserItemView
# ItemView
class UserItemView extends Backbone.Marionette.ItemView
template: "#item"
tagName: "li"
events:
"click .edit": "edit"
"click .remove": "remove"
remove: ->
@model.destroy()
edit: (e) ->
alert JSON.stringify @model
Run Code Online (Sandbox Code Playgroud) 在我为谓词构建器看到的所有示例中,PredicateBuilder.True如果要构建"和"表达式条件以及PredicateBuilder.False构建"或"表达式条件,它将显示一个起始表达式.
我的问题是,这种情况总是如此,如果是这样的话,为什么不能简单地推断出这一点.我怀疑必定会有一些情况,你正在构建一个"和"表达式,并希望从错误开始.与"或"相反
任何人都可以向我解释这个吗?
当使用T. Hedersen的backbone.validation插件(https://github.com/thedersen/backbone.validation)与Derick Bailey的backbone.modelbinding插件(https://github.com/derickbailey/)时,我遇到了一个问题.backbone.modelbinding).
我已经整理了一个jsFiddle示例(http://jsfiddle.net/simax/bEqnZ/)来试图证明这个问题.
在示例中,如果删除firstname或lastname的内容,则isValid(true)调用仍然返回true,这是不正确的,因为firstname和lastname都是必填字段.您还会注意到DisplayForm未正确更新.似乎模型属性没有正确"取消设置".
但是,如果删除对Backbone.Validation.this(bind)的调用,则会正确更新模型属性和DisplayForm.
谁知道问题是什么?
backbone.js ×2
c# ×2
angularjs ×1
asp.net-mvc ×1
email ×1
generics ×1
karma-runner ×1
linqkit ×1
marionette ×1
mongodb ×1
mongoose ×1
unit-testing ×1