假设您有一个更新Document的存储库方法:
public Document UpdateDocument(Document document)
{
Document serverDocument = _db.Documents.Find(document.Id);
serverDocument.Title = document.Title;
serverDocument.Content = document.Content;
_db.SaveChanges();
return serverDocument;
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,实体有两个属性.更新Document时,JSON请求中都需要这两个属性,因此请求PUT /api/folder
使用
{
"documentId" = "1",
"title" = "Updated Title"
}
Run Code Online (Sandbox Code Playgroud)
会返回错误,因为未提供"内容".我这样做的原因是,即使对于用户不更新的可空属性和属性,强制客户端在请求中指定这些字段似乎更安全,以避免使用nulls服务器端覆盖未指定的字段.
这导致我总是要求PUT和POST请求中的每个可更新属性,即使这意味着为这些属性指定null.
这是不是很酷,或者是否有一种我还没有学到的模式/实践可能会通过只发送线路上需要的内容来促进部分更新?
web-applications asp.net-mvc-3 asp.net-web-api single-page-application
根据这个问题的答案:
我试图在不使用Compare或ToLower的情况下进行不区分大小写的比较:
var user = db.Users.FirstOrDefault(s => String.Equals(s.Username, username, StringComparison.OrdinalIgnoreCase));
Run Code Online (Sandbox Code Playgroud)
但是我收到一个错误:
为调用方法'Boolean Equals(System.String,System.String,System.StringComparison)提供的参数数量不正确
我究竟做错了什么?
在下面的小提琴:
http://jsfiddle.net/jamitzky/9x7aJ/
如果窗口宽度发生变化,如何更改图形的宽度?
码:
$(function () {
var d1 = [];
for (var i = 0; i < 14; i += 0.5)
d1.push([i, Math.sin(i)]);
var d2 = [[0, 3], [4, 8], [8, 5], [9, 13]];
// a null signifies separate line segments
var d3 = [[0, 12], [7, 12], null, [7, 2.5], [12, 2.5]];
$.plot($("#placeholder"), [ d1, d2, d3 ]);
});
Run Code Online (Sandbox Code Playgroud) 我的组织需要一个共享数据库,共享模式多租户数据库.我们将根据TenantId进行查询.我们将只有极少数租户(少于10个),并且所有租户都将共享相同的数据库架构,不支持特定于租户的更改或功能.租户元数据将存储在内存中,而不是存储在DB(静态成员)中.
这意味着所有实体现在都需要TenantId,并且DbContext
需要知道默认情况下对此进行过滤.
该TenantId
会可能是由一个标头值或原始域来识别,除非有更明智的做法.
我已经看到各种样本利用拦截器,但没有看到TenantId实现的明确示例.
我们需要解决的问题:
tenantId
)User
s,以某种方式将它们与租户联系起来.我认为最大的问题是4 - 修改DbContext.
我喜欢本文如何利用RLS,但我不知道如何以代码优先,dbContext方式处理它:
我要说的是我正在寻找的是一种方法 - 考虑到性能 - 使用DbContext有选择地查询tenantId隔离的资源,而不需要调用我的调用"AND TenantId = 1"
等.
更新 - 我找到了一些选项,但我不确定每个选项的优缺点是什么,或者是否有一些"更好"的方法.我对选项的评估归结为:
方法A.
这似乎"昂贵",因为每次我们新建dbContext时,我们都必须重新初始化过滤器:
首先,我设置了我的租户和界面:
public static class Tenant {
public static int TenantA {
get { return 1; }
}
public static int TenantB
{
get { return 2; }
}
}
public interface ITenantEntity …
Run Code Online (Sandbox Code Playgroud) c# entity-framework multi-tenant ef-code-first azure-sql-database
我正在设计我的MVC应用程序的用户设置,现在我有~20个布尔设置,用户可以切换.由于每个用户总是会进行所有设置,因此我考虑将每个设置存储为User表中的布尔值.虽然随着应用程序需求的增长,这将变得难以处理.
第一个问题 - 在这种情况下,你的桌子上有大量的柱子有什么问题吗?
然后我考虑使用Flags,并将设置存储为数组中的每一位:
[Flags]
public enum Settings
{
WantsEmail = 1,
WantsNotifications = 2,
SharesProfile = 4,
EatsLasagna = 8
}
Run Code Online (Sandbox Code Playgroud)
然后每个用户在其用户行中将有一个"设置"列,如果有20个设置,则存储值为2 ^ 20.
我用这个来指导我的努力:[Flags] Enum属性在C#中意味着什么?
这比前一种做法好吗?欢迎任何建议.
我有一个我正在构建的移动应用程序的解决方案 - 到目前为止,它包含两个项目:
1) WebAPI for API / DAL / SQL etc
2) Web for single-page front-end
Run Code Online (Sandbox Code Playgroud)
Web项目调用WebAPI项目.计划是为Windows 8应用程序创建另一个项目,为WP8应用程序创建另一个项目,等等.
这在开发过程中运行良好,但在CORS,部署等方面变得相当复杂(Web是从与WebAPI不同的端点提供的 - 两个Azure Web站点).我的问题是 - 在构建一个由REST-ish API支持的解决方案时,何时将解决方案拆分为多个项目是明智/不明智的?
我的网络应用程序目前允许用户使用以下方法一次一个地上传媒体:
var fd = new FormData(document.forms[0]);
fd.append("media", blob); // blob is the image/video
$.ajax({
type: "POST",
url: '/api/media',
data: fd
})
Run Code Online (Sandbox Code Playgroud)
然后媒体被发布到WebApi控制器:
[HttpPost, Route("api/media")]
public async Task<IHttpActionResult> UploadFile()
{
if (!Request.Content.IsMimeMultipartContent("form-data"))
{
throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType);
}
string mediaPath = await _mediaService.UploadFile(User.Identity.Name, Request.Content);
return Ok(mediaPath);
}
Run Code Online (Sandbox Code Playgroud)
然后,它做了一些事情:
public async Task<string> UploadFile(string username, HttpContent content)
{
var storageAccount = new CloudStorageAccount(new StorageCredentials(accountName, accountKey), true);
CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();
CloudBlobContainer imagesContainer = blobClient.GetContainerReference("container-" + user.UserId);
var provider = new AzureStorageMultipartFormDataStreamProvider(imagesContainer);
await content.ReadAsMultipartAsync(provider);
var …
Run Code Online (Sandbox Code Playgroud) 我正在关注Web API 2中的属性路由文章,尝试通过URI发送数组:
[HttpPost("api/set/copy/{ids}")]
public HttpResponseMessage CopySet([FromUri]int[] ids)
Run Code Online (Sandbox Code Playgroud)
这在使用基于约定的路由时起作用:
http://localhost:24144/api/set/copy/?ids=1&ids=2&ids=3
Run Code Online (Sandbox Code Playgroud)
但是使用属性路由它不再有效 - 我找不到404.
如果我试试这个:
http://localhost:24144/api/set/copy/1
Run Code Online (Sandbox Code Playgroud)
然后它工作 - 我得到一个元素的数组.
如何以这种方式使用属性路由?
我的MediaRecorder实现指定了以下内容:
const getMediaRecorderOptions = function () {
var options = { mimeType: "video/webm;codecs=vp8" }; // 9 was lagggy, cpu-intensive
if (!MediaRecorder.isTypeSupported(options.mimeType)) {
logger.recorderLog(options.mimeType + " is not Supported");
options = { mimeType: "video/webm;codecs=vp8" };
if (!MediaRecorder.isTypeSupported(options.mimeType)) {
logger.recorderLog(options.mimeType + " is not Supported");
options = { mimeType: "video/webm" };
if (!MediaRecorder.isTypeSupported(options.mimeType)) {
logger.recorderLog(options.mimeType + " is not Supported");
options = { mimeType: "" };
}
}
}
return options;
}
Run Code Online (Sandbox Code Playgroud)
显然,这仅适用于iOS Safari或MacOS不支持的webm.我试图避免加倍存储并引入编码复杂性.Chrome上的MediaRecorder是否可以从任何平台直接录制到跨平台容器格式?
我在这个请求的日志中看到了很多条目:
/signalr/negotiate
Run Code Online (Sandbox Code Playgroud)
错误是:
The controller for path '/Account/Login' was not found or does not implement IController
Run Code Online (Sandbox Code Playgroud)
我有一个连接到AppHub
需要身份验证的JS客户端:
[Authorize]
[HubName("appHub")]
public class AppHub : Hub
{
// content
}
Run Code Online (Sandbox Code Playgroud)
发生这种情况是因为有一个'signalr`会话活着,并且过期的cookie尝试连接:
c# ×5
asp.net ×2
azure ×2
asp.net-mvc ×1
flot ×1
h.264 ×1
javascript ×1
linq ×1
linq-to-sql ×1
mp4 ×1
multi-tenant ×1
routes ×1
signalr ×1
webm ×1
webrtc ×1