我有一个控制器动作,我认为应该是一个HTTP PUT,但是当我尝试在控制器动作中使用@RequestParam时,Spring正在抱怨.HTTP PUT方法不允许使用请求参数,这就是Spring拒绝它的原因吗?
@RequestMapping(value = "/{helpDocumentId}/vote", method = RequestMethod.PUT)
public void voteHelpfulness(@PathVariable long helpDocumentId, @RequestParam boolean isHelpful) {
helpManager.voteOnHelpDocument(helpDocumentId, isHelpful);
}
Run Code Online (Sandbox Code Playgroud)
执行时,它会抛出此错误:
org.springframework.web.bind.MissingServletRequestParameterException: Required boolean parameter 'isHelpful' is not present
Run Code Online (Sandbox Code Playgroud)
当然,isHelpful参数IS存在.我可以使上面的代码完美地用于HTTP POST,所以我知道这不是问题.
$.ajax({
url: "/help/" + helpDocumentId + "/vote.json",
type: "PUT",
data: {
isHelpful: isHelpful
},
success: function(response) {
// ....
}
});
Run Code Online (Sandbox Code Playgroud)
PUT是正确的http方法吗?此操作会修改helpDocument,但不会创建一个.
我正在实现一个REST风格的界面,并希望能够通过HTTP PUT请求创建(通过上传)文件.我想创建一个TemporaryUploadedFile或一个InMemoryUploadedFile,然后我可以传递给我现有的FileField和.save()作为模型一部分的对象,从而存储文件.
我不太清楚如何处理文件上传部分.具体来说,这是一个put请求,我没有访问权限,request.FILES因为它在PUT请求中不存在.
所以,有些问题:
HttpRequest类中的现有功能,特别是处理文件上传的部分吗?我知道直接PUT不是多部分MIME请求,所以我不这么认为,但值得一提.TemporaryUploadFile和相关的代码 - 一次写一部分?我已经看过这个代码示例,它将Django PUT作为POST请求处理.如果我做得对,它只会处理表格编码数据.这是REST,因此最好的解决方案是不假设表格编码数据将存在.但是,我很高兴听到有关使用mime(而不是multipart)的适当建议(但上传应该只包含一个文件).
Django 1.3是可以接受的.所以我可以用request.raw_post_data或request.read()(或者其他一些更好的访问方法)做一些事情.有任何想法吗?
我知道HTTP PUT是一个幂等请求,根据定义(引自rfc)将某些内容存储在特定的URI中
The PUT method requests that the enclosed entity be stored under the supplied Request-URI.
Run Code Online (Sandbox Code Playgroud)
但是"封闭实体"的定义是什么?我似乎无法发送表单数据(例如HTTP POST请求).如何通过JSON/XML或其他序列化格式发送实体的表示?
简而言之,如何将HTTP PUT请求发送到特定URI的存储/更新信息呢?
我有一个简单的用户注册表单,有两个字段,一个用于用户名,另一个用于密码.我有一个控制器UserController,它有这两个动作:
[HttpGet]
public ActionResult Register()
{
return View();
}
[HttpPut]
public ActionResult Register(string username, string password)
{
// Registering user
return View();
}
Run Code Online (Sandbox Code Playgroud)
我使用HTTP Put来使我的网站RESTful(插入PUT动词).但是,当我提交表单时,我收到404错误.这是我的表单的HTML:
<form action='@Url.Action("Register", "User")' method="post">
<div class='field'>
<label for='username'>
Username:
</label>
<input type='text' id='username' name='username' maxlength='100' />
</div>
<div class='field'>
<label for='password'>
Password:
</label>
<input type='password' id='password' name='password' maxlength='50' />
</div>
</form>
Run Code Online (Sandbox Code Playgroud)
我在这里想念什么?怎么了?
我正在研究MVC应用程序.在我的原始服务草案中,我在我的一个控制器中使用了这个方法:
[AcceptVerbs(HttpVerbs.Post)]
[ActionName("UpdateRelationship")]
public ActionResult UpdateRelationship(string aParameter)
Run Code Online (Sandbox Code Playgroud)
这很好.在最新版本中,我被要求将其更改为PUT请求,以区别于使用post的类似添加机制.所以我改成了这个:
[AcceptVerbs(HttpVerbs.Put)]
[ActionName("UpdateRelationship")]
public ActionResult UpdateRelationship(string aParameter)
Run Code Online (Sandbox Code Playgroud)
突然之间我的请求得到了404,所有这一切都只是改变了AcceptVerbs.从错误的外观来看,似乎IIS正在尝试将请求路由为标准的webforms页面,而不是使用MVC无扩展URL重写.
谷歌搜索这似乎是一个常见的原因是浏览器不允许PUT请求,但我没有使用浏览器测试这个 - 我正在使用Fiddler.所以那里应该没有问题.我还认为web.config中已经有正确的设置:
<system.webServer>
<validation validateIntegratedModeConfiguration="false" />
<modules runAllManagedModulesForAllRequests="true">
<remove name="WebDAVModule" />
</modules>
<handlers>
<remove name="UrlRoutingHandler" />
<remove name="MvcHttpHandler" />
<remove name="WebDAV" />
<add name="MvcHttpHandler" preCondition="integratedMode" verb="*" path="*.mvc" type="System.Web.Mvc.MvcHttpHandler, System.Web.Mvc, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
</handlers>
<security>
<requestFiltering>
<verbs>
<add verb="PUT" allowed="true" />
</verbs>
</requestFiltering>
</security>
</system.webServer>
Run Code Online (Sandbox Code Playgroud)
那么我错过了什么?
编辑:此代码适用于同事的机器.所以看起来我的本地IIS设置是错误的.仍然无法解释我需要改变的东西 - 任何想法?
干杯,马特
所以我有一个网站接受HTTP-PUT特定资源,例如./contact这将允许消费者更新联系人,假设他们已通过验证.
所以我更新了记录,一切都很好..现在我需要向消费者返回一些内容.
什么是我应该返回的HTTP状态代码?
如果这是一个HTTP-POST(即创建一个-new-资源),那么我将返回一个201 Created并添加一个Locationheader属性.
但是......我找不到任何关于如何为更新做的线索.
干杯:)
在Chrome中,它会像它应该的那样执行HTTP PUT,但在FireFox 21中却没有.javascript控制台或后端没有错误.
这是HTML:
<div id="createTeamModal" class="small reveal-modal">
<form id="createTeamForm">
<div class="row"><p id="teamFlavorText" class="lead">Building a new team</p></div>
<div class="row">
<div class="small-4 large-4 columns"><label>Team Name:</label></div>
<div class="small-6 large-6 columns"><input name="teamName" id="teamName" type="text" size="20"/></div>
</div>
<div class="row"><p class="lead">Does this team work for a business?</p></div>
<div class="row">
<div class="small-4 large-4 columns"><label>Business Size:</label></div>
<div class="small-6 large-6 columns">
<select id="businessSizeSelect" name="businessSizeSelect">
<option value="1">Nope, I work alone</option><option value="2">2 to 49</option><option value="3">50 to 99</option><option value="4">100 to 999</option><option value="5">1,000+</option>
</select>
</div>
</div>
<div id="businessLocationDiv" class="row" style="display: none; margin-top: …Run Code Online (Sandbox Code Playgroud) 我正在尝试在MVC 4应用程序中使用PUT,我收到405错误.
在我的路由中,我对允许PUT和POST的路由有约束,POST到端点工作,PUT失败了405.
我已经按照这里的建议ASP.NET Web API仅在某些服务器上返回404 for PUT,这里ASP.NET MVC在HTTP DELETE请求上得到405错误?
我也从IIS中删除了WeDAV,但我仍然得到了405.任何人还有其他建议吗?
我在IIS 8(使用Visual Studio 2012)上也遇到了完全相同的问题,因为我遵循了这个建议ASP.NET Web API - PUT&DELETE动词不允许 - IIS 8仍然没有运气
我一直在努力争取如何完成这项工作几个小时.我正在尝试通过HTTP-PUT将文件发送到eXist数据库.有服务器的用户身份验证,所以我试图做这样的事情:
我有要将文档输入的URL我有eXist DB的用户名和密码我有需要通过PUT发送的内容
我尝试使用cURL,但它会无声地失败我尝试使用PHP流,但不断收到"错误201 /创建"但实际上没有创建文件.
任何有关这方面的帮助都将非常感激.
这是我尝试使用PHP流的一些示例代码
$data = file_get_contents($tmpFile);
$header = array(
"Authorization: Basic " . base64_encode($this->ci->config->item('ws_login') . ':' . $this->ci->config->item('ws_passwd')),
"Content-Type: text/xml"
);
$params = array(
'http' => array(
'method' => 'PUT',
'header' => $header,
'content' => $data));
$ctx = stream_context_create($params);
$response = file_get_contents($url, false, $ctx);
编辑:我想我已经弄清楚如何做二进制数据部分.在代码中仔细检查它,但我很确定我做对了.现在,我在尝试按照Vimeo API文档中的描述完成上传时遇到了新错误
编辑2:将 .debug()添加到OAuthService并更新输出.
原始问题:我正在尝试使用Vimeo API(流媒体方法)将视频上传到Vimeo .我正在使用scribe来授权我的应用,获取我的访问令牌并准备上传视频.在这个PUT的HTTP请求示例中,我只是不知道该做什么,Vimeo API文档说"你这里的文件的二进制数据":
PUT http://1.2.3.4:8080/upload?ticket_id=abcdef124567890 HTTP/1.1
主持人:1.2.3.4:8080
内容长度:339108
内容类型:video/mp4
....你的文件的二进制数据在这....
我可以得到罚单和标题.它只是,我该怎么做才能插入我的文件的二进制数据?
笔记:
这是我的put代码(记住,我正在使用scribe)
// Setup File (line 52)
File testUp = new File("C:/Users/Kent/Desktop/test.mp4");
String contentLength = Long.toString(testUp.length());
System.out.println("The content length is: " + contentLength);
byte[] fileBytes = ByteStreams.toByteArray(new FileInputStream(testUp));
// Upload file (line 58)
request = new OAuthRequest(Verb.PUT, endpoint);
request.addHeader("Content-Length", contentLength);
request.addHeader("Content-Type", "video/mp4");
request.addPayload(fileBytes);
response = signSendAndPrint(service, accessToken, request, "Upload PUT: " + …Run Code Online (Sandbox Code Playgroud)