如何在jQuery中为ajax请求执行X-HTTP-Method-Override?
如果我需要在HTTP PUT请求中发送表单数据,它是否有效?
如果你能指出我的规格,那就太棒了.
[更新]
我已经完成了HTTP 1.1规范.但我没有发现PUT请求是否可以有Form数据.
我正在使用Java来创建和访问RESTful webservices.POST支持application/x-www-form-urlencoded作为Content-Type.
根据规范,我了解POST用于创建新资源(由请求URI标识的资源的子资源),PUT用于创建或更新资源.
但我怀疑PUT方法是否也可以有表格数据呢?我试图根据规格找出它是否合适.我在HTTP 1.1规范中找不到任何相关内容.
谢谢,保罗
我在使用web api在asp.net中一次更新我的数据库1列时遇到此问题.我试图查询PUT只更新行中的一个值而不是更新那个值并将其余值设置为null.我在控制器之外做了一个单独的模型来接受更新,所以我可以一次做一个.当我db.Entry(user).State = EntityState.Modified;
在控制器中点击该行时,它出错了.有什么建议我怎么解决这个问题?
这是我在put方法中使用的单独的ViewModel:
namespace WebAPI.Models.ViewModels
{
public class UserViewModel
{
public string FirstName { get; set; }
public string LastName { get; set; }
}
}
Run Code Online (Sandbox Code Playgroud)
这是我的控制器在我的参数中使用ViewModel调用方法:
public HttpResponseMessage PutUser(int id, UserViewModel user)
{
HttpResponseMessage response;
if (db.User.IsInRole("Admin"))
{
try
{
db.Entry(user).State = EntityState.Modified;
db.SaveChanges();
}
catch (DbUpdateConcurrencyException)
{
if (!UserExists(id))
{
response = new HttpResponseMessage(HttpStatusCode.NotFound);
return response;
}
else
{
throw;
}
}
response = new HttpResponseMessage(HttpStatusCode.NoContent);
return response;
}
Run Code Online (Sandbox Code Playgroud)
这是我的DBContext
档案:
public partial …
Run Code Online (Sandbox Code Playgroud) 我的Ubuntu中的命令行sftp没有实现递归put.我发现2004年有关于使用-R选项开关实现此类功能的一些争论.所以我认为某种自制的递归是唯一的选择.
IE浏览器.
我打算用bash做这个,但任何其他语言就足够了.
Rsync或scp不是一个选项,因为我没有对服务器的shell访问权限.只有sftp.
所以,我可以使用CORS成功地对我的服务进行GET调用.但是,在POST,PUT和DELETE操作的预检级别上必须出错.但是,根据我的判断,我的服务器响应OPTIONS查询返回的标头响应是正确的,并与之中描述的匹配
这是我的javascript代码,在JQuery 1.6.4中使用$ .ajax.
$.ajax({
url: 'http://myhome:8080/TaskApproval/resources/tasks/2',
context: this,
data: '<?xml version="1.0" encoding="UTF-8"?> <task> <description>Get carrots from the grocery store</description><originator>Chris</originator><subject>Get Carrots !!</subject><taskId>2</taskId> </task> ',
timeout: 30000,
type: 'PUT',
contentType: 'application/xml',
success: function(response) {
alert(response);
result = response;
},
error: function(xhr) {
alert('Error! Status = ' + xhr.status + " Message = " + xhr.statusText);
}
});
Run Code Online (Sandbox Code Playgroud)
现在,这就是我的HTTP Trail看起来像Firebug的礼貌.
请求:
OPTIONS /TaskApproval/resources/tasks/2 HTTP/1.1
Host: widgethome:8080
User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:6.0.2) Gecko/20100101 Firefox/6.0.2
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip, deflate
Accept-Charset: …
Run Code Online (Sandbox Code Playgroud) 请看这个简单的代码:
final String url = String.format("%s/api/shop", Global.webserviceUrl);
RestTemplate restTemplate = new RestTemplate();
restTemplate.getMessageConverters().add(new MappingJackson2HttpMessageConverter());
HttpHeaders headers = new HttpHeaders();
headers.set("X-TP-DeviceID", Global.deviceID);
HttpEntity entity = new HttpEntity(headers);
HttpEntity<Shop[]> response = restTemplate.exchange(url, HttpMethod.GET, entity, Shop[].class);
shops = response.getBody();
Run Code Online (Sandbox Code Playgroud)
如您所见,上面的代码旨在从服务器(以json格式)获取商店列表,并将响应映射到Shop对象数组.现在我需要推出新店,例如/ api/shop/1.请求实体应具有与返回的格式完全相同的格式.
我应该将/ 1添加到我的网址,创建新的Shop类对象,所有字段都填充了我想要放置的值,然后使用与HttpMethod.PUT的交换?
请为我澄清一下,我是Spring的初学者.代码示例将不胜感激.
[编辑]我很困惑,因为我刚注意到方法RestTemplate.put().那么,我应该使用哪一个?交换还是放()?
我想使用JQuery-File-Upload上传文件,但使用HTTP"PUT"而不是multipart-forms.根据他们的网站:
- Multipart and file contents stream uploads:
Files can be uploaded as standard "multipart/form-data" or file contents stream (HTTP PUT file upload).
Run Code Online (Sandbox Code Playgroud)
但我在他们的文档中找不到如何做到这一点.有人可以帮忙吗?
出于某种原因,我现在使用的下面的代码因此引发了一个异常:
public static async Task<string> HttpPut(string inUrl, string inFilePath)
{
using (var handler = new HttpClientHandler
{
AllowAutoRedirect = false
})
{
using (var client = new HttpClient(handler))
{
//var content = new StreamContent(new FileStream(inFilePath, FileMode.Open, FileAccess.Read, FileShare.Read, bufferSize: 4096, useAsync: true));
using (var content = new StreamContent(new FileStream(inFilePath, FileMode.Open)))
{
content.Headers.Remove("Content-Type");
content.Headers.Add("Content-Type", "application/octet-stream");
using (var req = new HttpRequestMessage(HttpMethod.Put, inUrl))
{
string authInfo = String.Format("{0}:{1}", Program.Config.MediaStorageList.Find(o => o.Name == "Viz Media Engine Test").UserName, Program.Config.MediaStorageList.Find(o => o.Name == "Viz Media …
Run Code Online (Sandbox Code Playgroud) 我搜索过,但我找不到答案.我有一个RESTful API来管理基本的CRUD.我正在尝试使用PUT创建更新方法,但我无法检索params值.我正在使用Postman发出请求,我的请求如下:
网址
http://localhost/api/update/987654321
Run Code Online (Sandbox Code Playgroud)
PARAMS
id = 987654321
name = John Smith
age = 35
Run Code Online (Sandbox Code Playgroud)
PHP
$app = new Slim();
$app->put('/update/:id', function( $id ) use( $app ){
var_dump([
'id' => $id,
'name' => $app->request->put('name'),
'age' => $app->request->put('age')
]);
});
Run Code Online (Sandbox Code Playgroud)
我的var_dump()
结果是:
array(3) {
["id"]=>
string(9) "987654321"
["name"]=>
NULL
["age"]=>
NULL
}
Run Code Online (Sandbox Code Playgroud)
怎么了?任何的想法?
从版本2.5.7开始, Spring Data REST无法正确执行PUT请求以更新具有关联资源的资源.与按预期工作的PATCH请求不同!
例如,Person
与多对一关联Addres
.如果我们使用SDR v.2.5.6(Spring Boot v.1.4.3)执行PUT请求,那么一切正常.但是,如果我们切换到2.5.7版(即Spring Boot v.1.4.4),那么我们会收到一个错误:
无法构造Address的实例:没有String-argument构造函数/工厂方法从String值反序列化
其他类型的关联也会发生同样的情况,例如一对多(单向和双向) - 请参阅我的示例应用程序代码和测试.
从1.4.4开始,Spring Boot的所有版本都存在此问题,包括最新的稳定1.5.6版本,以及最新的2.0.0-SNAPSHOT版本!
要解决这种情况,我们可以切换到SDR v.2.5.6(Spring Boot v.1.4.3).
我准备了一个邮递员的请求集合,以帮助您解决问题:SDR PUT问题
更新2017-08-14
我找到了如何避免错误Can not construct instance of Address: no String-argument constructor/factory method to deserialize from String value
.
由于我在这个项目中使用Lombok,因此有必要告诉Lombok禁止@ConstructorProperties
在生成的构造函数中使用注释
.所以我lombok.anyConstructor.suppressConstructorProperties=true
在'lombok.config'文件中设置,错误消失了.
不幸的是,发现了一个新问题 - PUT请求根本不更新关联的对象!
以下示例说明了这一点.当我们尝试通过将他的地址从addresses/1
(初始值)更改为addresses/2
- 来更新Person时,它仍然是相同的:addresses/1
!与之前的问题一样,自1.4.4以来,这一问题出现在Spring Boot的 …
put ×10
http ×3
jquery ×3
rest ×3
c# ×2
java ×2
asp.net ×1
content-type ×1
cors ×1
dbcontext ×1
http-headers ×1
httpclient ×1
javascript ×1
json ×1
php ×1
recursion ×1
restful-url ×1
resttemplate ×1
sftp ×1
slim ×1
spring ×1
spring-boot ×1