惯性 - 重新加载使用 POST 创建的页面 url 显示 GET 405(方法不允许)

Inertia - Reloading page url created with POST shows GET 405 (Method Not Allowed)

我想加载一个新的 vue component 并在 URL 中显示它的 id。可以这样做:

<template>
  <button @click="submit">Load new page with id in url</button>
</template>

<script>
import {Inertia} from "@inertiajs/inertia";

const submit = () => {
    const id = 1
    Inertia.post('/admin/kreationen/bearbeiten/' + id, {id: id})
}
</script>

laravel side (web.php) 上:

Route::post('/admin/kreationen/bearbeiten/{id}', function (Request $request) {
    return inertia('backend/cms-gallery-edit', ['id' => $request->id]);
});

问题是,当我重新加载页面时,显示此错误:

GET http://127.0.0.1:8000/admin/kreationen/bearbeiten/1 405 (Method Not Allowed)

我明白为什么会出现这个错误,但是我怎样才能在新的 url 中显示 id 而不会出现这个错误?

Edit:

我不知道为什么我原来的方法昨天不起作用,但现在却起作用了。对于任何感兴趣的人:

<inertia-link :href="'/admin/kreationen/bearbeiten/' + data['id']">
  <button>Load new page with id in url</button>
</inertia-link>

后端:

Route::get('/admin/kreationen/bearbeiten/{id}', function (Request $request) {
    return inertia('backend/cms-gallery-edit', ['id' => $request->id]);
});

可能您需要使用 GET 请求而不是 POST 请求。如果是,则只需将您的 ID 添加到 url,然后将 GET method 传递给参数:

const id = 1      
Inertia.visit('/admin/kreationen/bearbeiten/' + id, {method: 'get'})

Laravel url 中的后端保持原样,但收到的参数仅为 $id 并且方法需要更改为 GET:

    Route::get('/admin/kreationen/bearbeiten/{id}', function ($id) {
        return inertia('backend/cms-gallery-edit', ['id' => $id]);
    });

当您尝试通过 GET 方法加载 POST 方法 url 时发生 405 (Method Not Allowed),反之亦然。

所以首先当你点击的时候,post方法可以正常工作,但是当你重新加载页面时,它被认为是GET方法(就像直接打开页面一样)。因此收到 405 错误是公平的,如果您能够根据需要使用 GET 方法,则使用 GET 方法(如果您可以接受用户在没有任何形式的情况下直接访问页面 posted)。

如果没有,那么您可能首先在不同的路由中执行 POST 请求,然后将用户重定向到另一条路由(以防止 re-sending 在重新加载页面时形成表单,但要打开另一个页面一些表单数据(当然它必须保存在某个地方,比如会话或数据库))