我已经在我的WebAPI项目中非常安静地实现了CRUD功能.我现在正在尝试实现对象存档(不完全删除) - 如果只有ARCHIVEHTTP方法.
我看到两个选择:
1)具有isArchived每个可归档实体的属性,即使归档与请求无关,也必须包含在PUT和POST请求中.归档一个实体将是一个调用PUT /api/object/idisArchived设置为true的问题.看起来很笨重而且很安静.
2)拥有一个PUT /api/object/id/archive不需要身体的RPC-ish网址.似乎最有效但不安宁.
每个人在"通过api呼叫存档我的东西"空间中做了什么?
rest web-applications asp.net-web-api single-page-application
题:
当我需要在WebAPI中为每个实体实现自己的POST/PUT/GET端点时,breeze提供了什么价值?
背景:
这似乎是服务器端Breeze控制器的常见实现:
[BreezeController]
public class TodosController : ApiController {
readonly EFContextProvider<TodosContext> _contextProvider =
new EFContextProvider<TodosContext>();
// ~/breeze/todos/Metadata
[HttpGet]
public string Metadata() {
return _contextProvider.Metadata();
}
// ~/breeze/todos/Todos
// ~/breeze/todos/Todos?$filter=IsArchived eq false&$orderby=CreatedAt
[HttpGet]
public IQueryable<TodoItem> Todos() {
return _contextProvider.Context.Todos;
}
// ~/breeze/todos/SaveChanges
[HttpPost]
public SaveResult SaveChanges(JObject saveBundle) {
return _contextProvider.SaveChanges(saveBundle);
}
// other miscellaneous actions of no interest to us here
}
Run Code Online (Sandbox Code Playgroud)
我正在构建一个RESTish API,到目前为止,它具有以下端点:
GET /api/todo/1
PUT /api/todo
POST /api/todo
Run Code Online (Sandbox Code Playgroud)
似乎Breeze要求端点更简单(无论好坏) - 只是一堆GETS和一个SaveChanges POST端点.
这让我觉得Breeze使用单个Web客户端进行快速开发,轻而易举......但是只要您拥有匿名客户端,就必须强制它们进入您在客户端创建的任何微风界面约定,这似乎打败了RESTful API设计的目的.是这样的吗?
我的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是否可以从任何平台直接录制到跨平台容器格式?
我有以下内容:
<div id="side-menu" class="sidebar-nav span2">
<div class="sidebar-link"><span>Link 1</span></div>
<div class="sidebar-link"><span>Link 2</span></div>
</div>
Run Code Online (Sandbox Code Playgroud)
当你将鼠标悬停在它们上面时,我试图让两个div中的每一个都改变颜色 - 无论你是否将鼠标悬停在文本右侧或左侧的文本上.目前只有当我将鼠标悬停在文本上时颜色才会发生变化.知道如何做到这一点?这是我用css的小提琴:
我有一个三阶段登录表单,在进行进度时显示/隐藏页面上的内容.当用户从步骤1进入步骤2时,我调用以下内容:
var stateObj = { foo: "bar" };
history.pushState(stateObj, "", "");
Run Code Online (Sandbox Code Playgroud)
我看到浏览器后退按钮启用.
现在,我正试图抓住后退按钮点击,这样我就可以隐藏/显示内容(例如 - 回到第1阶段).
如何在此方案中检测浏览器后退按钮?我不希望URL改变,我只想在用户回击时调用一些JS函数.我的目标是现代桌面/移动浏览器.
我有一个RTCPeerConnectionwithontrack定义的实例:
newConnection.ontrack = receivedStream // remote
Run Code Online (Sandbox Code Playgroud)
一旦 SDP 交换完成并且对等方添加其本地流:
connection.addStream(stream); // local
Run Code Online (Sandbox Code Playgroud)
我看到receivedStream每个流被调用两次 - 检查e.track显示第一次调用是针对audio轨道的,第二次是针对video轨道的。
奇怪的是,检查e.streams[0]和调用getTracks这个给了我两个MediaStreamTracks- 一个用于音频,另一个用于视频:
因此,尽管调用了一次,但 我还是在两次调用中获得了四个 。MediaStreamTracksreceivedStreamaddStream
receivedStream 在这儿:
function receivedStream(e) {
var stream = e.streams[0]; // this gets invoked twice when adding one stream!
if (!stream) {
throw new Error("no stream found");
};
// this gets me the corresponding connection
waitForStream(stream.id).then(function (connection) …Run Code Online (Sandbox Code Playgroud) 在以下代码中:
$(document).keypress(function(e) {
var code = (e.keyCode ? e.keyCode : e.which);
if (code == 40) {
alert("down pressed");
} else if (code == 38) {
alert("up pressed");
}
});
Run Code Online (Sandbox Code Playgroud)
我正在尝试检测是否按下了向下键或向上键.为什么不工作?
小提琴 http://jsfiddle.net/K9uDn/10/
我是铬
我有CORS使用以下内容:
[System.Web.Http.HttpPut]
[System.Web.Http.AcceptVerbs("OPTIONS")]
[System.Web.Http.Route("api/exercise")]
public HttpResponseMessage UpdateExercise(Exercise exercise) {
try {
_adminService.UpdateExercise(exercise);
return Request.CreateResponse(HttpStatusCode.OK, "Success");
} catch (Exception e) {
return Request.CreateResponse(HttpStatusCode.InternalServerError, e);
}
}
Run Code Online (Sandbox Code Playgroud)
在我的global.asax:
protected void Application_BeginRequest() {
if (Request.Headers.AllKeys.Contains("Origin") && Request.HttpMethod == "OPTIONS") {
Response.Flush();
}
}
Run Code Online (Sandbox Code Playgroud)
但是有些奇怪的事情正在发生 - 如果我在控制器中设置断点,OPTIONS请求会通过null练习进入内部.为什么会这样?我希望Flush()能防止这种情况发生.
就目前而言,我需要为所有对CORS敏感的端点(PUT,DELETE)添加null检查.这看起来不太优雅......我应该能够阻止OPTIONS请求命中控制器逻辑,而只是直接响应所需的标题吗?
我有一种情况,我希望异步启动用户定义的任务数,并等待所有任务完成.简化,这是我正在处理的:
[TestMethod]
public async Task Start() {
var numDrivers = 2;
while (numDrivers != 0) {
var rnd = new Random();
var r = rnd.Next(itemArray.Count);
var target = itemArray[r];
var proxyDriver = GetProxiedDriver();
Task.Run(() => HandleIntro(proxyDriver, target));
numDrivers--;
}
}
Run Code Online (Sandbox Code Playgroud)
对于某些上下文 - 这些是Selenium webdrivers开始运行一些UI测试.我看到浏览器弹出,但是一旦Task.Run()完成,所有执行都会停止.n在停止执行之前,如何在等待所有驱动程序完成之前触发驱动程序以异步方式运行?
我已经尝试了await Task.Run(() => HandleIntro(proxyDriver, target));但这等待任务,他们不会同时运行.
HandleIntro:
private async Task HandleIntro(FirefoxDriver driver, string target) {
// do stuff
}
Run Code Online (Sandbox Code Playgroud) 大约一年前,Azure Web App插槽交换是"无缝的" - 一旦完成,新实例就会热身接受新请求而不会有任何延迟.
现在,当我交换插槽STAGING时PRODUCTION,即使在运行测试STAGING以对应用程序进行预热之后,交换也会产生许多预热时间.
这怎么可能改变,我该怎么做才能确保我的应用程序在交换期间保持100%可访问?