相关疑难解决方法(0)

REST中的PUT与POST

根据HTTP/1.1规范:

POST方法用来请求原始服务器接受被附在请求由标识的资源的新下属实体Request-URIRequest-Line

换句话说,POST用于创建.

PUT方法请求将所包含的实体存储在提供的实体下Request-URI.如果Request-URI引用已经存在的资源,则封闭的实体应该被视为驻留在源服务器上的实体的修改版本.如果Request-URI未指向现有资源,并且该URI能够被请求用户代理定义为新资源,则源服务器可以使用该URI创建资源.

也就是说,PUT用于创建或更新.

那么,应该使用哪一个来创建资源?或者需要支持两者?

rest post http put

5227
推荐指数
34
解决办法
227万
查看次数

大多数Web浏览器中是否提供PUT,DELETE,HEAD等方法?

我在这里看到了几个问题,例如如何调试RESTful服务,其中提到:

不幸的是,相同的浏览器不允许我测试HTTP PUT,DELETE,甚至在某种程度上测试HTTP POST.

我也听说过浏览器只支持GET和POST,来自其他一些来源:

但是,Firefox中的一些快速测试显示发送PUTDELETE请求按预期工作 - XMLHttpRequest成功完成,并且请求以正确的方法显示在服务器日志中.我是否缺少某些方面,例如跨浏览器兼容性或非明显的限制?

browser ajax http cross-browser

596
推荐指数
7
解决办法
23万
查看次数

为什么浏览器不支持PUT和DELETE请求,何时支持?

我最近看到许多框架决定"伪造"PUT和DELETE请求.就像Ruby on Rails一样.他们似乎在等待浏览器赶上来.他们在等待是徒劳的吗?

这甚至可以在任何地方实施吗?

rest put

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

CSRF验证失败.请求中止

我尝试构建一个非常简单的网站,可以将数据添加到sqlite3数据库中.我有一个带有两个文本输入的POST表单.

index.html的:

{% if top_list %}
    <ul>
    <b><pre>Name    Total steps</pre></b>
    {% for t in top_list %}
        <pre>{{t.name}} {{t.total_steps}}</pre>
    {% endfor %}
    </ul>
    {% else %}
    <p>No data available.</p>
{% endif %}
<br>
<form action="/steps_count/" method="post">
    {% csrf_token %}
    Name: <input type="text" name="Name" /><br />
    Steps: <input type="text" name="Steps" /><br />
   <input type="submit" value="Add" />
 </form>
Run Code Online (Sandbox Code Playgroud)

forms.py:

from django import forms
from steps_count.models import Top_List

class Top_List_Form(forms.ModelForm):
    class Meta:
        model=Top_List
Run Code Online (Sandbox Code Playgroud)

views.py:

# Create your views here.
from django.template import Context, loader …
Run Code Online (Sandbox Code Playgroud)

python django csrf requestcontext

14
推荐指数
5
解决办法
6万
查看次数

PUT请求图片上传无法在django休息

我试图用上传在Django其余图像multipart/form-dataPUT要求和枕头:

class ABC(APIView):
    parser_classes = (MultiPartParser,)
    def put(self, request):
        a = Image()
        a.image_url = request.data["image"]
        a.save()

class Image(models.Model):
      image_url = models.ImageField(upload_to='static/bills', blank=True)
Run Code Online (Sandbox Code Playgroud)

我发出了一个请求,它是一个PUT请求和一个multipart/form-data.我最终得到的响应代码为400,并带有以下消息:

{
  "detail": "Multipart form parse error - Invalid boundary in multipart: None"
}
Run Code Online (Sandbox Code Playgroud)

不知何故,这已经破裂了.我第一次写这篇文章时工作正常.从那时起,我为CORS请求添加了一些设置配置,例如:

CORS_ORIGIN_ALLOW_ALL = True

CORS_ALLOW_HEADERS = (
    'x-requested-with',
    'content-type',
    'accept',
    'origin',
    'authorization',
    'x-csrftoken',
    'token',
    'x-device-id',
    'x-device-type',
    'x-push-id',
    'dataserviceversion',
    'maxdataserviceversion'
)
CORS_ALLOW_METHODS = (
        'GET',
        'POST',
        'PUT',
        'PATCH',
        'DELETE',
        'OPTIONS'
    )
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

选项请求响应:

Access-Control-Allow-Headers ? x-requested-with, content-type, accept, origin, authorization, x-csrftoken, …
Run Code Online (Sandbox Code Playgroud)

python django rest pillow

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

单击电子邮件中的链接时如何避免启动浏览器

目前,我的部分应用程序会向用户发送电子邮件,提醒他们注意事件或任务.当点击一个MarkComplete在电子邮件客户端的链接,一个HTTP GET请求我做ActionHandler.ashx(一个HttpHandler),其中的查询字符串参数的输入,允许事件/任务的更新.然后将新的电子邮件发送回客户端信令完成.这有效.

这种HTTP GET对处理程序的不良副作用是启动浏览器(即此时,浏览器的打开是不必要的并且是令人讨厌的).

前提:当我研究ASP.Net Web Api时,我想我可能能够将HTTPHandler中的少量代码重构为Web API控制器中的PUT方法.我的理解是,在执行上述所需的处理之后,该控制器可以用无效返回(HTTP状态代码204)进行响应.

问题:Web API控制器中新编写的PUT方法中的上述方法是否会返回204,这是否会阻止浏览器完全启动?我希望最终用户点击他第一封电子邮件中的链接,只获得新构建的电子邮件信号"完成"(此处根本没有浏览器).

编辑澄清2016年5月22日:

  • 我不需要"用户互动".理想情况下,用户点击并且没有任何事情发生在用户身上,而不是新的"回复电子邮件"表明任务成功完成.
  • 下面的建议答案中列出的选项2已经尝试失败,一些主要的电子邮件程序不允许这样做 - 请参阅:提交给HttpHandler导致RequestType GET而不是POST
  • 请注意,当前发出的HTML电子邮件内容包含任何包含邮件中链接标记的HTML表单标记.
  • 我还有没有选择吗?我已经读过HTTP PUT可以处理一个查询字符串(我只是不确切知道如何这样做......)

vb.net email-client http asp.net-mvc-4 asp.net-web-api

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

浏览器是否支持具有多部分/表单数据的PUT请求

当我从Google Chrome提交此表单时,浏览器会发出GET请求.从HTML表单提交的具有多部分/表单数据编码的HTTP PUT请求通常是不受支持的客户端吗?

<form id="#main-form" action="http://localhost:8080/resource/1" method="put"
            enctype="multipart/form-data">
    <input type="text" name="name"/>
    <input type="submit" value="submit" />
</form>     
Run Code Online (Sandbox Code Playgroud)

html javascript forms rest multipartform-data

7
推荐指数
1
解决办法
7343
查看次数

RESTful PHP:它如何从客户端到服务器端工作?

我对RESTful PHP上的教程/示例感到困惑.他们中的大多数都在使用框架(例如Slim)并最终成为API,这使我更加困惑.在完全理解如何创建简单的RESTful PHP之前,我想首先避免所有框架和API材料.

我明白那个,

REST,它的核心,就是为工作使用正确的HTTP动词.GET,POST,PUT,DELETE都有意义,如果某些内容被描述为RESTful,那么它真正意味着所涉及的网站/应用程序都遵循这些含义.

而从PHP服务器端,我明白这是怎么我能察觉的REST请求类型,

$_SERVER['REQUEST_METHOD']
Run Code Online (Sandbox Code Playgroud)

但我的主要问题是如何通过URL将这些REST类型(GET,POST,PUT,DELETE)发送到服务器?

例如,从本教程中,

当您希望创建或更新URL标识的资源时,将使用PUT请求.例如,

http://restfulphp.com/clients/robin

然后,

DELETE应该与PUT相反; 当您要删除请求的URL标识的资源时,应该使用它.

http://restfulphp.com/clients/anne

http://restfulphp.com/clients/robin并且http://restfulphp.com/clients/anne相同的干净URL模式.我怎么知道前者是用于PUT而后者是用于DELETE?或者,在那里我应该在表格/ HTML设置来区分它们?

当curl进来时它会变得复杂 - 它与REST网站有什么关系?

从上面的教程,

Once you have cURL installed, type: 
curl -v google.com
Run Code Online (Sandbox Code Playgroud)

我应该在哪里打字?

curl如何帮助我删除或PUT?如何$_SERVER['REQUEST_METHOD']从curl中检测REST类型?

curl -v -X DELETE /clients/anne
Run Code Online (Sandbox Code Playgroud)

curl -v -X PUT -d "some text"
Run Code Online (Sandbox Code Playgroud)

我问的问题可能听起来很愚蠢,但如果有人能帮助我理解这些问题会很棒.

编辑:

Argg PHP cURL- 另一件让我更加困惑的事情!如果我要通过XMLHttpRequest对象发送REST请求类型,为什么还需要它?它似乎是为了与其他API提供程序进行通信,我希望在此阶段避免使用它们.

如果我可以PHP cURL …

php rest curl

3
推荐指数
1
解决办法
1837
查看次数

不能用烧瓶的PUT方法

我写了这个简单的程序:

@app.route('/puttest/', methods=['GET', 'PUT'])
def upload_file():
    if request.method == 'PUT':
        return 'Hello, {}!'.format(request.form['name'])
    else:
        return '''
            <title>Does it work ?</title>
            <h1>PUT test</h1>
            <form action=http://localhost:8887/puttest/ method=put>
                <input type=text name=name>
                <input type=submit value=try>
            </form>

        '''

if __name__ == '__main__':
    app.run('0.0.0.0', 8887)
Run Code Online (Sandbox Code Playgroud)

它适用于GET方法,但它无法使用PUT.尝试发送put消息,我可以在浏览器中看到此错误:

Method Not Allowed

The method is not allowed for the requested URL.
Run Code Online (Sandbox Code Playgroud)

put方法发生了什么?

如果我在程序中的任何地方改变put方法,它将工作正常post.

python put flask

3
推荐指数
1
解决办法
2944
查看次数

Http Put 不是从剃刀页面发送的

我尝试使用 ASP.NET Core 标签助手创建一个像这样的简单 HTML 表单:

 <form asp-action="RemoveScheduledTenancyDeletion" method="put" asp-route-tenancyId="@Model.Tenancy.TenancyId">          
      <div class="form-group">              
           <input type="submit" value="Remove sheduled tenancy deletion" class="btn btn-default" />
      </div>
 </form>
Run Code Online (Sandbox Code Playgroud)

TenancyController里面有一个简单的动作:

    [HttpPut]
    public async Task<IActionResult> RemoveScheduledTenancyDeletion(Guid tenancyId)
    {
          //some logic here
         return RedirectToAction(nameof(List));
    }
Run Code Online (Sandbox Code Playgroud)

我尝试通过开发人员工具检查表单是否正确生成: 在此处输入图片说明

对我来说似乎没问题,但是,当我尝试发送表单时出现错误: 在此处输入图片说明

似乎以某种方式将整个请求转化为HttpGet动作。任何想法可能是错误的?

超出范围,我有一个单独的 REST API,其中定义了此类操作,HttpPut并且它可以与 Angular 和其他与 API 通信的客户端应用程序正常工作,因此我看不出有任何理由不应该将其HttpPut用作在 ASP.NET Core MVC 应用程序中很好。我错过了什么吗?干杯

c# rest put razor asp.net-core-mvc

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

为什么使用 PUT 方法提交表单我收到 GET 请求?

在我的 laravel 5.7 应用程序中,我制作了用于更新数据的表单,例如:

<section class="card-body">
    <h4 class="card-title">Edit vote</h4>


    <form method="PUT" action="{{ url('/admin/votes/update/'.$vote->id) }}" accept-charset="UTF-8" id="form_vote_edit" class="form-horizontal"
          enctype="multipart/form-data">
        {!! csrf_field() !!}
        <ul class="nav nav-pills mb-3" id="pills-tab" role="tablist">
Run Code Online (Sandbox Code Playgroud)

在routes/web.php中用餐的路线:

Route::group(['middleware' => ['auth', 'isVerified', 'CheckUserStatus'], 'prefix' => 'admin', 'as' => 'admin.'], function () {
    ...
    Route::put('/votes/update/{vote_id}', 'Admin\VotesController@update');
Run Code Online (Sandbox Code Playgroud)

但提交表格时我收到错误请求:

Request URL: http://local-votes.com/admin/votes/update/22?_token=0CEQg05W4jLWtpF3xB6BGSdz1icwysiDOStLVgHv&id=22&name=gg...
Request Method: GET
Status Code: 405 Method Not Allowed
Run Code Online (Sandbox Code Playgroud)

为什么 GET 请求,我的表单有什么问题?

谢谢!

laravel-5

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