标签: http-put

Spring MVC可以为HTTP PUT方法提供请求参数,还是我必须使用post?我应该使用哪个RESTful?

我有一个控制器动作,我认为应该是一个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 spring http spring-mvc http-put

19
推荐指数
2
解决办法
2万
查看次数

如何在Django中通过PUT请求处理文件上传?

我正在实现一个REST风格的界面,并希望能够通过HTTP PUT请求创建(通过上传)文件.我想创建一个TemporaryUploadedFile或一个InMemoryUploadedFile,然后我可以传递给我现有的FileField.save()作为模型一部分的对象,从而存储文件.

我不太清楚如何处理文件上传部分.具体来说,这是一个put请求,我没有访问权限,request.FILES因为它在PUT请求中不存在.

所以,有些问题:

  • 我可以利用HttpRequest类中的现有功能,特别是处理文件上传的部分吗?我知道直接PUT不是多部分MIME请求,所以我不这么认为,但值得一提.
  • 如何推断出发送的mime类型?如果我做对了,PUT主体就是没有前奏的文件.因此,我是否要求用户在其标题中指定mime类型?
  • 如何将其扩展到大量数据?我不想把它全部读入内存,因为这是非常低效的.理想情况下,我会做什么TemporaryUploadFile和相关的代码 - 一次写一部分?

我已经看过这个代码示例,它将Django PUT作为POST请求处理.如果我做得对,它只会处理表格编码数据.这是REST,因此最好的解决方案是不假设表格编码数据将存在.但是,我很高兴听到有关使用mime(而不是multipart)的适当建议(但上传应该只包含一个文件).

Django 1.3是可以接受的.所以我可以用request.raw_post_datarequest.read()(或者其他一些更好的访问方法)做一些事情.有任何想法吗?

python django rest http-put django-1.3

18
推荐指数
1
解决办法
7006
查看次数

如何发出HTTP PUT请求?

我知道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的存储/更新信息呢?

http http-put

16
推荐指数
3
解决办法
7万
查看次数

HTML表单上的ASP.NET MVC中的PUT或DELETE谓词

我有一个简单的用户注册表单,有两个字段,一个用于用户名,另一个用于密码.我有一个控制器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)

我在这里想念什么?怎么了?

forms rest asp.net-mvc http-put asp.net-mvc-3

13
推荐指数
2
解决办法
1万
查看次数

在.NET MVC上启用Http PUT请求

我正在研究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设置是错误的.仍然无法解释我需要改变的东西 - 任何想法?

干杯,马特

iis asp.net-mvc http-put

13
推荐指数
2
解决办法
2万
查看次数

更新资源时,更新成功时返回什么HTTP状态代码?

所以我有一个网站接受HTTP-PUT特定资源,例如./contact这将允许消费者更新联系人,假设他们已通过验证.

所以我更新了记录,一切都很好..现在我需要向消费者返回一些内容.

什么是我应该返回的HTTP状态代码?

如果这是一个HTTP-POST(即创建一个-new-资源),那么我将返回一个201 Created并添加一个Locationheader属性.

但是......我找不到任何关于如何为更新做的线索.

干杯:)

rest http-post http-status-codes http-put

12
推荐指数
2
解决办法
1万
查看次数

为什么这个jQuery AJAX PUT在Chrome中工作但不在FF中工作

在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)

ajax firefox jquery xmlhttprequest http-put

11
推荐指数
1
解决办法
5018
查看次数

MVC 4. IIS 7.5 PUT返回405

我正在尝试在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仍然没有运气

asp.net-mvc http-put iis-7.5 http-status-code-405 iis-8

10
推荐指数
2
解决办法
5447
查看次数

在PHP中通过HTTP PUT发送文件

我一直在努力争取如何完成这项工作几个小时.我正在尝试通过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);

php curl stream http-put

8
推荐指数
1
解决办法
2万
查看次数

HTTP PUT以Java格式上传文件

编辑:我想我已经弄清楚如何做二进制数据部分.在代码中仔细检查它,但我很确定我做对了.现在,我在尝试按照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

....你的文件的二进制数据在这....

我可以得到罚单和标题.它只是,我该怎么做才能插入我的文件的二进制数据?

笔记:

  • 它是Java中的桌面应用程序
  • 这是我正在测试的一个小视频文件

这是我的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)

java file-upload vimeo http-put scribe

8
推荐指数
1
解决办法
6072
查看次数