我想将此数据发布到Web API服务器:
public sealed class SomePostRequest
{
public int Id { get; set; }
public byte[] Content { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
将此代码用于服务器:
[Route("Incoming")]
[ValidateModel]
public async Task<IHttpActionResult> PostIncomingData(SomePostRequest requestData)
{
// POST logic here
}
Run Code Online (Sandbox Code Playgroud)
这个 - 对于客户:
var client = new HttpClient();
client.BaseAddress = new Uri("http://localhost:25001/");
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(
new MediaTypeWithQualityHeaderValue("application/json"));
var content = new FormUrlEncodedContent(new Dictionary<string, string>
{
{ "id", "1" },
{ "content", "123" }
});
var result = await client.PostAsync("api/SomeData/Incoming", content);
result.EnsureSuccessStatusCode();
Run Code Online (Sandbox Code Playgroud)
一切正常(至少,调试器在断点处停止PostIncomingData).
由于有一个 …
安装VS 2015后,从命令行运行csc.exe会导致此消息显示到控制台:
此编译器作为Microsoft(R).NET Framework的一部分提供,但仅支持C#5以外的语言版本,而C#5不再是最新版本.对于支持较新版本的C#编程语言的编译器,请参阅 http://go.microsoft.com/fwlink/?LinkID=533240
该链接重定向到GitHub上的Roslyn存储库.
那么,是从命令行运行"支持更新版本的编译器"(Roslyn)的方法吗?
C#语言规范(7.6.10.4)说,有树种类的数组创建表达式:
new non-array-type [expression-list] rank-specifiersopt array-initializeropt
new array-type array-initializer
new rank-specifier array-initializer
第三个用于隐式类型化数组:
var foo = new[] { 1, 2, 3 };
Run Code Online (Sandbox Code Playgroud)
问题:在隐式类型化数组的情况下,是否有任何重要理由禁止显式设置数组大小?
与此语法相比,它看起来像不对称行为:
var foo = new int[3] { 1, 2, 3 };
Run Code Online (Sandbox Code Playgroud)
更新.
一点澄清.我可以看到显式设置数组大小和数组初始化程序组合的唯一优势是初始化程序长度的编译时检查.如果我声明了三个ints 的数组,初始化器必须包含三个ints.
我认为,隐式类型数组也有同样的优势.当然,使用这种优势或不使用是个人偏好.
我需要帮助来阐明EF Code First Migrations如何在生产机器上运行.我有一些实体类和DbContext派生类来访问实体.现在,我想执行以下几项操作:
我已经阅读了一些有关迁移的文章,但它们主要关注NUGET的使用或运行时的纯自动数据库更新(通过MigrateDatabaseToLatestVersion).我知道关于DbMigration课程,但我无法理解,如何将MigrateDatabaseToLatestVersion策略粘合在一起DbMigration.
UPDATE.
事实上,我不能在项目中使用NUGET,我需要"手动"进行迁移.
我有一些WPF控件.例如,TextBox.如何枚举该控件的所有依赖属性(如XAML编辑器那样)?
我正在寻找一种方法来实现这样的事情:
#if CSHARP_COMPILER_IS_FOR_CSHARP_6_OR_HIGHER
foo?.Bar();
#else
if (foo != null)
{
foo.Bar();
}
#endif
Run Code Online (Sandbox Code Playgroud)
当然,我可以自己定义一个条件编译符号,但它不适合.
有内置常量吗?
我发现的问题相当陈旧.也许,事情变得最好了?
我遇到过这样的情况.WinForms应用程序有两种形式.主窗体有一个按钮,当用户点击它时,会显示模态对话框.对话框表单也有一个按钮,当用户点击它时,抛出异常.
当应用程序在调试器下运行并运行时,异常处理会有所不同.这是最小的代码,重现这种行为:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
try
{
using (var dialog = new Form2())
{
dialog.ShowDialog();
}
}
catch (Exception ex)
{
MessageBox.Show("Oops! " + ex.Message);
}
}
}
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
throw new NotImplementedException();
}
}
Run Code Online (Sandbox Code Playgroud)
调试时,引发异常会关闭对话框,Form1.button1_Click中的异常处理程序会处理异常.
在运行应用程序本身时,引发异常不会关闭对话框.而不是这样,默认调用Application.ThreadException处理程序.
为什么(以及为什么)行为有所不同?如何使它相互一致?
我正在使用查询结果投影到自定义类型,它不是实体数据模型的一部分:
public sealed class AlgoVersionCacheItem : NotificationObject
{
public int OrderId { get; set; }
public string OrderTitle { get; set; }
public int? CurrentVersion { get; set; }
public int CachedVersion { get; set; }
public IEnumerable<int> AvailableVersions { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我想AvailableVersions按降序排序.因此,我试图AvailableVersions在投影中添加排序:
return someQueryable
.Select(version => new AlgoVersionCacheItem
{
OrderId = version.OrderId,
OrderTitle = version.Order.Title,
CurrentVersion = version.Order.CurrentAlgoVersionId,
CachedVersion = version.Id,
AvailableVersions = version
.Order
.AlgoVersions
.Where(v => (allowUncommittedVersions || v.Statuses.Any(s => s.AlgoVersionStatusListItemId …Run Code Online (Sandbox Code Playgroud) 我已经开始阅读Hangfire文档,但没有发现任务限制.
如声明的那样,任务(或作业)存储在某处.
因为他们只是代表,所以唯一可以存储,据我所知,是一个代表"身体"(IL?).但是可能存在闭包,它为任务提供了一些上下文,例如,一些外部服务,可能需要加载额外的程序集来运行它们的代码等.
Hangfire如何处理这个问题?
任务可以包含其正文中的任何说明,还是有任何限制?