我们有一个MVC(MVC4)应用程序,有时可能会将第三方发布的JSON事件发送到我们的特定URL(" http://server.com/events/ ").JSON事件位于HTTP POST的主体中,正文是严格的JSON(Content-Type: application/json- 不是某些字符串字段中带有JSON的表单).
如何在控制器的主体内接收JSON主体?我尝试了以下但没有得到任何东西
[编辑]:当我说没有得到任何东西时,我的意思是jsonBody始终为null,无论我是将其定义为Object或string.
[HttpPost]
// this maps to http://server.com/events/
// why is jsonBody always null ?!
public ActionResult Index(int? id, string jsonBody)
{
// Do stuff here
}
Run Code Online (Sandbox Code Playgroud)
请注意,我知道如果我使用强类型输入参数声明方法,MVC会进行整个解析和过滤,即
// this tested to work, jsonBody has valid json data
// that I can deserialize using JSON.net
public ActionResult Index(int? id, ClassType847 jsonBody) { ... }
Run Code Online (Sandbox Code Playgroud)
但是,我们获得的JSON非常多样,因此我们不希望为每个JSON变体定义(和维护)数百个不同的类.
我正在通过以下curl命令测试它(这里有一个JSON的变体)
curl -i -H "Host: localhost" -H "Content-Type: …Run Code Online (Sandbox Code Playgroud) 为未来的读者编辑:不幸的是,获得赏金的答案不起作用; 我现在无能为力.但是请在下面阅读我自己的答案(通过测试) - 确认可以使用最少的代码更改
我们有一个完全在ASP.NET WebAPI 2.2中的Azure云服务(WebRole)(没有MVC,前端是Angular).我们的一些控制器/ REST端点通过SSL(客户端证书身份验证/相互身份验证)与第三方云服务通信,其余控制器/端点与HTML5/AngularJS前端通信,也通过SSL(但更传统的服务器身份验证) SSL).我们没有任何非SSL端点.我们通过云服务启动任务启用了客户端SSL,例如:
IF NOT DEFINED APPCMD SET APPCMD=%SystemRoot%\system32\inetsrv\AppCmd.exe
%APPCMD% unlock config /section:system.webServer/security/access
Run Code Online (Sandbox Code Playgroud)
问题:该设置是站点范围的,所以即使用户点击第一页(比如https://domain.com,返回angular.html的index.html),他们的浏览器也要求他们提供客户端SSL证书.(下图)
如果有办法要么
要么
我们的服务器的web.config很复杂,但相关的代码片段如下:
<system.webServer>
<security>
<access sslFlags="SslNegotiateCert" />
</security>
</system.webServer>
Run Code Online (Sandbox Code Playgroud)
并且客户端的屏幕截图访问常规WebAPI端点但仍在尝试客户端SSL身份验证(在任何浏览器,Chrome,Firefox或IE中都会发生)

让我们看看一些简单的C#async/await代码,其中我obj在awaitwith 之前和之后有一个对象引用()ConfigureAwait(false)
private async Task<SomeObject> AnAsyncLibraryMethod(SomeObject obj)
{
Console.WriteLine(Thread.CurrentThread.ManagedThreadId);
obj.Name = "Harry"; // <-- obj here
// MAIN POINT
var newSubObj = await FetchOverHttpAsync().ConfigureAwait(false);
// Continuation here
Console.WriteLine(Thread.CurrentThread.ManagedThreadId);
obj.Name = "Sally"; // <-- same obj here
return obj;
}
public class SomeObject { public string Name; }
Run Code Online (Sandbox Code Playgroud)
ConfigureAwait(false)似乎意味着没有 将延续回到原始上下文 - 好吧,但这究竟意味着什么?我已经尝试了上面的代码并且obj IS正确引用了(即使它在不同的线程上恢复).
所以"上下文"似乎不是线程的工作内存(即线程本地存储).那么"上下文"包含什么?因此,它到底意味着什么
将继续编组回到捕获的原始上下文
我开始喜欢在Visual Studio 2013中右键单击任何类/方法/字段等时出现的"在代码映射上显示".但是,我注意到它似乎不够聪明才能"重绘" (或者被命令重绘)当底层类改变时(有点代码映射的目的).
目前我必须删除已被修改的类,然后重新添加它以查看"新"依赖项行,但这是一个问题,因为有15个项目我现在必须跟踪(纸张+笔)哪些类在代码中被更改所以我记得删除/添加它们.否则,该图仍然显示一些令人困惑的陈旧依赖.
那么,无论如何都要告诉VS2013" 你是否会根据当前版本刷新代码图中所有对象之间的依赖图?"
在context.SaveChanges()其中一个例外情况下处理几个潜在的异常时OptimisticConcurrency.有关此问题的Microsoft文档,请访问http://msdn.microsoft.com/en-us/library/bb399228.aspx,对于EF 4.x进行了讨论.
try
{
// Try to save changes, which may cause a conflict.
int num = context.SaveChanges();
Console.WriteLine("No conflicts. " +
num.ToString() + " updates saved.");
}
catch (OptimisticConcurrencyException)
{
// Resolve the concurrency conflict by refreshing the
// object context before re-saving changes.
context.Refresh(RefreshMode.ClientWins, orders);
// Save changes.
context.SaveChanges();
Console.WriteLine("OptimisticConcurrencyException "
+ "handled and changes saved");
}
Run Code Online (Sandbox Code Playgroud)
...但是在EF 5.0(RC)上,这似乎不起作用,因为Refresh()我的EF5,代码优先,DbContext派生context类上不存在.
我确实看到了context.Entry(context.SalesOrderHeaders).Reload();- 但这似乎是一个直接从db重新加载而不是刷新/合并(与策略客户端获胜).
任何想法如何处理EF5中的乐观并发异常?实际上甚至在SaveChanges()中关于异常处理的一般指针都会很好
谢谢
我需要用新的管理员登录/用户替换旧的管理员登录/用户.我尝试了以下方法:
CREATE LOGIN newDbAdmin WITH password='123isTheBestPasswordEver'
CREATE USER newDbAdmin
Run Code Online (Sandbox Code Playgroud)
有了这个,我就可以通过Microsoft SQL Server Management Studio登录Azure SQL.但它似乎不是管理员级登录+用户.我无法创建表和管理员可以做的其他一些事情.我怀疑我需要授予某些模式的权限(dbo?)或者那些沿线的东西......
那么,在Azure SQL上创建用户+登录的正确方法是什么,具有与原始管理员相同的权限级别(在我通过Azure门户网站创建数据库时创建).
在相关的说明中,我假设处理旧登录的正确方法是:
DROP USER oldAdmin
DROP LOGIN oldAdmin
Run Code Online (Sandbox Code Playgroud)
?
有没有办法可以将Git用作代码存储库,还可以用于构建和持续部署到Azure(云服务,而不是网站)?我怀疑没有给出缺少的构建环境,除非在写完之前要确认这一点.
从理论上讲,我可以看到让Git托管在同时进行构建和部署的Windows服务器上 - 不确定是否有人将其减少到实践中.
我们有一个主'用户'表和许多引用UserId的表
现在,如果一切都很完美,删除用户应该像在主表中删除它们一样简单,并且ON CASCADE约束通过其余的表将它涟漪化.问题是我们不能100%确定引用的每个表中的每个FK关系(直接或间接)是否具有ON CASCADE约束.我们需要一些方法来发出删除并观察SQL Server实际触摸要删除的表.我看了这个并尝试了但它没有显示任何级联的表 - 只是主表中的条目
这是我尝试过的:
DELETE umt
OUTPUT DELETED.*
FROM [OurAppDb].[dbo].[UserMasterTable] umt
WHERE umt.UserId LIKE 'ABCDABCD-ABCD-ABCD-ABCD-ABCDABCDABCD'
Run Code Online (Sandbox Code Playgroud)
如何查看上述查询将触及的所有表格?
注意:ON CASCADE约束是我们认为在构建每个表时为每个表添加的数据库中的约束.它被添加到一个表上的示例
ALTER TABLE [dbo].[UserEmailPrefs]
WITH CHECK ADD CONSTRAINT [FK_UserEmailPrefs_UserMasterTable_UserId] FOREIGN KEY([UserId])
REFERENCES [dbo].[UserMasterTable] ([UserId])
ON DELETE CASCADE
GO
ALTER TABLE [dbo].[UserEmailPrefs] CHECK CONSTRAINT [FK_UserEmailPrefs_UserMasterTable_UserId]
GO
Run Code Online (Sandbox Code Playgroud) C#(.NET或Mono)基类库中的哪个类直接实现B树,或者可以快速重写/继承以实现B树?我看到Hashtable类,但似乎无法找到任何来自Tree家庭的任何类...
必须有一个基本Tree类,可以通过指定树不变条件来重写生成特定的Tree实现(如B-tree或Red-Black或Binary Tree等).让程序员重新发明基本数据结构的轮子是没有意义的(Tree在CompSci中是非常基础的),特别是在面向对象的语言中; 所以我很确定我只是没找对...
编辑:
c# ×3
admin ×1
asp.net-core ×1
asp.net-mvc ×1
asynchronous ×1
azure ×1
code-map ×1
git ×1
https ×1
json ×1
post ×1
sql-server ×1
ssl ×1
tree ×1