考虑重定向的ASP.NET Web API服务
public class ThisController : ApiController
{
/* more methods */
public override HttpResponseMessage Post()
{
var result = new HttpResponseMessage(HttpStatusCode.MovedPermanently);
// Post requests should be made to "ThatController" instead.
string uri = Url.Route("That", null);
result.Headers.Location = new Uri(uri, UriKind.Relative);
return result;
}
}
Run Code Online (Sandbox Code Playgroud)
试图验证POST数据到"api/this"会将你重定向到"api/that",我有以下测试方法:
[TestMethod]
public void PostRedirects()
{
using (var client = CreateHttpClient("application/json"))
{
var content = CreateContent(expected, "application/json");
using (var responseMessage = client.PostAsync("api/this", content).Result)
{
Assert.AreEqual(HttpStatusCode.MovedPermanently, responseMessage.StatusCode);
Assert.AreEqual(new Uri("https://api.example.com/api/that"), responseMessage.Headers.Location);
}
}
}
protected HttpClient …Run Code Online (Sandbox Code Playgroud) 假设我有以下类层次结构:
public abstract class Organization
{
/* properties related to all organizations */
}
public sealed class Company : Organization
{
/* properties related to companies */
}
public sealed class NonProfitOrganization : Organization
{
/* properties related to non profit organizations */
}
Run Code Online (Sandbox Code Playgroud)
是否有可能让json.net使用属性(比如"type"或"discriminator")来确定对象在反序列化组织时的类型?例如,以下内容应反序列化Company的实例.
{
"type": "company"
/* other properties related to companies */
}
Run Code Online (Sandbox Code Playgroud)
以下应该反序列化NonProfitOrganization的实例.
{
"type": "non-profit"
/* other properties related to non profit */
}
Run Code Online (Sandbox Code Playgroud)
当我打电话给以下人时:
Organization organization = JsonConvert.DeserializeObject<Organization>(payload);
Run Code Online (Sandbox Code Playgroud)
其中payload是上面的JSON片段.我看一下在属性或类上设置" TypeNameHandling ",但是它序列化了整个.NET类型,当在不同的命名空间和程序集中定义类时,它在客户端和服务器之间不是"可移植的".
我宁愿定义类型是一种中性的方式,用任何语言编写的客户端都可以用它来确定被序列化的对象类型的实际类型.
如何防止在IIS/ASP.NET转储文件中提交和接收ASP.NET网页的密码和其他敏感数据?
重现步骤
请注意,使用HTTPS无关紧要,因为它只会加密通信.ASP.NET将数据存储在内存或磁盘中.
问题
通用的智慧是加密敏感数据而不是将其存储在清晰的数据中.但是,员工可能会收到IIS/ASP.NET应用程序的转储并发现用户的密码和其他机密数据,因为此信息既未加密,也未在使用后清除ASP.NET使用的内存.
这使他们处于危险之中,因为他们可以访问它.有时会与合作伙伴(例如Microsoft)共享转储,以帮助他们诊断代码中的问题.它是在一个应用程序中诊断一些非常复杂的问题的必要部分.
我看到的东西
我希望的是告诉IIS/ASP.NET特定请求/响应包含敏感数据,并且IIS/ASP.NET将在使用它时清除内存.
考虑使用ASP.NET Web API编写的Web服务将任何数字文件作为"multipart/mixed"请求接受.辅助方法mat看起来如下(假设_client是一个实例System.Net.Http.HttpClient):
public T Post<T>(string requestUri, T value, params Stream[] streams)
{
var requestMessage = new HttpRequestMessage();
var objectContent = requestMessage.CreateContent(
value,
MediaTypeHeaderValue.Parse("application/json"),
new MediaTypeFormatter[] {new JsonMediaTypeFormatter()},
new FormatterSelector());
var content = new MultipartContent();
content.Add(objectContent);
foreach (var stream in streams)
{
var streamContent = new StreamContent(stream);
streamContent.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");
streamContent.Headers.ContentDisposition =
new ContentDispositionHeaderValue("form-data")
{
Name = "file",
FileName = "mystream.doc"
};
content.Add(streamContent);
}
return _httpClient.PostAsync(requestUri, content)
.ContinueWith(t => t.Result.Content.ReadAsAsync<T>()).Unwrap().Result;
}
Run Code Online (Sandbox Code Playgroud)
在ApiController的子类中接受请求的方法具有如下签名:
public HttpResponseMessage Post(HttpRequestMessage …Run Code Online (Sandbox Code Playgroud) 如何使用SignalR在.NET 4.0系统中实现通知,该系统由ASP.NET MVC 3应用程序(使用表单身份验证),SQL Server 2008数据库和MSMQ WCF服务(托管在WAS中)来处理数据?运行时环境包含在Windows Server 2008 R2 Standard Edition上运行的IIS 7.5.
我只玩了样本,没有广泛的SignalR知识.
这是一些背景知识
Web应用程序接受来自用户的数据并将其添加到表中.然后,它调用WCF服务的单向操作(使用数据库密钥)来处理数据(任务).Web应用程序返回到一个页面,告诉用户数据已提交,并在处理完成时通知他们.用户可以查看"索引"页面,查看哪些任务已完成,失败或正在进行中.他们可以继续提交更多任务(这与以前的数据无关).他们可以关闭浏览器并稍后返回.
基于MSMQ的WCF服务从数据库中读取记录并处理数据.这可能需要几毫秒到几分钟的时间.处理完数据后,记录会以相应的状态(错误或失败)和结果进行更新.
大多数情况下,WCF服务不执行任何处理,但是当它执行时,用户通常希望尽快知道何时完成.即使用户没有要由WCF服务处理的数据,用户仍将使用Web应用程序的其他部分.
这就是我所做的
在主导航栏中,我有一个指示器(类似于Facebook或Google+),供用户在任务状态发生变化时通知他们.当他们点击它时,他们会得到已完成的内容的摘要,然后可以根据需要查看结果.
使用jQuery,我轮询服务器的更改.控制器操作检查是否存在任何已修改(已完成或失败)的进程并返回它们,否则等待几秒钟并再次检查而不返回客户端.为了避免客户端超时,如果没有更改,它将在30秒后返回.jQuery脚本等待一段时间再试一次.
问题
每个查看页面的用户的性能都会下降.他们没有必要特别做任何事情.我们注意到Firefox 7+和Safari的内存使用量会随着时间的推移而增加.
使用SignalR
我希望切换到SignalR可以减少轮询,从而减少资源需求,尤其是在数据库中没有任何改变任务的情况下.我很难通过WCF服务来通知客户端它已完成处理任务,因为它使用基于表单的身份验证.
通过提出这个问题,我希望有人能够更好地了解他们如何使用SignalR重新设计我的通知方案,如果有的话.
考虑文件"MyClass.cs"中的以下类
using System;
public class MyClass : Entity<long>
{
public long Id
{
get;
set;
}
[Required]
public string Name
{
get;
set;
}
public string Slug
{
get;
set;
}
public DateTime CreatedOn
{
get;
private set;
}
public DateTime UpdatedOn
{
get;
private set;
}
/* ... */
}
Run Code Online (Sandbox Code Playgroud)
目前我手动创建数据合同类,如下所示:
[DataContract(Namespace = "http://example.com/", Name = "MyClass")]
public sealed class MyClass
{
[DataMember(EmitDefaultValue = false, Name = "Id")]
public long Id
{
get;
set;
}
[DataMember(EmitDefaultValue = false, Name …Run Code Online (Sandbox Code Playgroud) 假设我有一个名为LICENSE.txt的存储库中的文件.内容如下:
Copyright 2014 MyCompany. All Rights Reserved.
Run Code Online (Sandbox Code Playgroud)
自2015年以来,我改变了今年的2015年:
Copyright 2015 MyCompany. All Rights Reserved.
Run Code Online (Sandbox Code Playgroud)
然后上传文件
git add LICENSE.txt
Run Code Online (Sandbox Code Playgroud)
由于分心,我对LICENSE.txt做了另一个更改,以反映另一个组织的版权.
Copyright 2015 MyCompany and Affiliates. All Rights Reserved.
Copyright 2015 Other Company. All Rights Reserved.
Run Code Online (Sandbox Code Playgroud)
通过运行,我能够看到我的工作副本和分阶段副本之间的区别
git diff
Run Code Online (Sandbox Code Playgroud)
我可以通过运行看到分阶段副本和提交副本之间的区别
git diff --cached
Run Code Online (Sandbox Code Playgroud)
如何将承诺的副本(没有更改年份的副本)与工作副本(具有附加版权的副本)进行比较?
这纯粹是一个例子.有些情况要复杂得多,我需要将我上演的内容与我随后对文件所做的更改进行比较.比较工作副本和分阶段副本的内容将决定是否应该替换分阶段副本.
我在Windows Server 2012 R2上运行git 1.9.5.
如何在OS X Server 2.0上部署Django应用程序而不使用自制程序或不同于OS X 10.8.1附带的python风格的python?我在Django应用程序中使用cocoa绑定,并且无法在我的桌面计算机上运行自制程序(运行OS X 10.8.1); 因此请求在系统安装的Python版本上部署应用程序.
我有以下OS X Server环境,已安装以下内容:
使用以下命令安装Django 1.4.1:
sudo easy_install django
Run Code Online (Sandbox Code Playgroud)
我的第一次尝试是部署一个空网站,一旦成功,就部署一个真正的应用程序用于生产.该项目是/Library/Server/Web/Data/WebApps/mysite/使用以下命令创建的
django-admin.py startproject mysite
Run Code Online (Sandbox Code Playgroud)
我使用以下命令运行应用程序.它只是确认应用程序已启动并正在运行.这是标准的"它奏效了!" 首次创建项目时的页面.
python manage.py runserver 8080
Run Code Online (Sandbox Code Playgroud)
然后我创建了一个/Library/Server/Web/Config/apache2/httpd_mysite.conf包含以下内容的文件:
WSGIScriptAlias /mysite /Library/Server/Web/Data/WebApps/mysite/mysite/wsgi.py
Run Code Online (Sandbox Code Playgroud)
我进一步创建了一个/Library/Server/Web/Config/apache2/webapps/com.example.mysite.wsgi.plist包含以下内容的文件:
<?xml version="1.0" encoding="UTF-7"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>name</key>
<string>com.example.mysite.wsgi</string>
<key>displayName</key>
<string>Python "My Site" app</string>
<key>launchKeys</key>
<array/>
<key>proxies</key>
<dict/>
<key>installationIndicatorFilePath</key>
<string>/Library/Server/Web/Data/WebApps/mysite/mysite/wsgi.py</string>
<key>includeFiles</key>
<array>
<string>/Library/Server/Web/Config/apache2/httpd_mysite.conf</string>
</array>
<key>requiredModuleNames</key> …Run Code Online (Sandbox Code Playgroud) 假设我有一个带有许多C#类的项目(比如ProjectA),并且这些类不引用项目外部的任何类型和System.dll程序集的类型.ProjectA中的类可能具有方法,属性,字段和自定义属性.类也可以存在于不同的名称空间中.
如何使用T4将所有这些类(包括方法,属性,字段和自定义属性)从ProjectA转换为另一个项目(例如ProjectB)中的相关集合.
有几种工具如何为给定的正则表达式生成样本数据.一些包括:
但是,虽然它们可能足以为数据集设定种子,但它对测试依赖于正则表达式本身的代码(例如验证)没有太大帮助.
假设您有一个代码生成器,可以生成带有属性的模型.用户指定正则表达式来验证属性.现在假设代码生成器正在尝试生成测试以确保验证成功并且适当地失败.该工具专注于正则表达式中的边界情况以避免生成不必要的数据似乎是合理的.
例如,考虑一个正则表达式^([a-z]{3,6})$然后边界情况包括:
关注边界情况的原因是任何仅由[az]组成的长度大于6的字符串都会验证正则表达式中定义的字符串长度的上边界.因此,测试长度为7,8,9的字符串实际上只是测试相同(边界)条件.
这是一个因其简单而选择的任意正则表达式,但任何合理的正则表达式都可以作为输入.
是否存在框架/工具,代码生成器可以使用它来为正在生成的系统的不同层的测试用例生成输入字符串.当系统不再在开发周期的后期生成和修改时,测试用例就会出现.
请考虑以下ASP.NET MVC razor视图片段,它定义了一个帮助器
@helper FieldFor<TModel>(Expression<Func<TModel, string>> expression)
{
<div class="form-group">
@Html.LabelFor(expression,
htmlAttributes:
new {@class = "control-label col-md-2"})
<div class="col-md-10">
@Html.EditorFor(expression,
new
{
htmlAttributes =
new {@class = "form-control"}
})
@Html.ValidationMessageFor(expression, "",
new {@class = "text-danger"})
</div>
</div>
}
Run Code Online (Sandbox Code Playgroud)
将它转换为类似于以下类的方法的模式是什么?
public static MvcHtmlString FieldFor(this HtmlHelper helper, FieldFor<TModel>(Expression<Func<TModel, string>> expression))
{
/* Method */
}
Run Code Online (Sandbox Code Playgroud)
我发现的所有示例都专注于生成不依赖于其他HTML帮助程序的标记.