繁体   English   中英

Laravel REST 资源无法发布到 API

[英]Laravel REST Resource can't post to API

我已经在 Laravel 中构建了一个 REST API,它目前正在使用 MAMP 在本地运行,尽管我已经在实时服务器上尝试过它并且出现了同样的问题。

当我尝试将我的表单发布到 API 时它不起作用,除非我同时让 Artisan 在不同的端口号上为站点提供服务并发布到该 URL,即 www.mysite.com:2834/api/courses,我可以获取浏览器中的页面没问题,只是 POST 会导致问题。

我启用了 COR,并且我尝试使用 PostMan 执行相同的 POST 请求,它给出了相同的结果,即当它只是我发布到的普通 URL www.mysite.com/api/courses 时不起作用但当我也工作时在不同的端口上运行 Artisan 并发布到 www.mysite.com:2834/api/courses。

奇怪的是,使用 CURL 完成后,POST 可以在没有 Artisan 运行的情况下工作:

         curl -i -H "X-Requested-With: XMLHttpRequest" -H "Content-Type: application/x-www-form-urlencoded" -X POST http://www.mysite.io/api/courses  --data "&author=tertertert&name=ertertert&description=ertertret&price=ertretret"

这是我的路线列表:

            |        | GET|HEAD                       | api/courses                                            | api.courses.index    | App\Http\Controllers\CourseController@index                | web,cors                                        |
            |        | POST                           | api/courses                                            | api.courses.store    | App\Http\Controllers\CourseController@store                | web,cors                                        |
            |        | GET|HEAD                       | api/courses/{courses}                                  | api.courses.show     | App\Http\Controllers\CourseController@show                 | web,cors                                        |
            |        | PUT|PATCH                      | api/courses/{courses}                                  | api.courses.update   | App\Http\Controllers\CourseController@update               | web,cors                                        |
            |        | DELETE                         | api/courses/{courses}                                  | api.courses.destroy  | App\Http\Controllers\CourseController@destroy              | web,cors                                        |

和我的控制器:

            <?php

            namespace App\Http\Controllers;

            use App\Course;
            use App\Http\Requests;
            use App\Http\Requests\CourseForm;


            class CourseController extends Controller
            {
                /**
                 * Display a listing of the resource.
                 *
                 * @return \Illuminate\Http\Response
                 */
                public function index()
                {
                    $courses = Course::all();
                    return response()->json(['courses' => $courses]);
                }

                /**
                 * @param CourseForm $request
                 * @return \Illuminate\Http\JsonResponse
                 */
                public function store(CourseForm $request)
                {
                        $course = new Course();
                        $course->author = $request->input('author');
                        $course->name = $request->input('name');
                        $course->description = $request->input('description');
                        $course->price = $request->input('price');
                        $course->save();
                        return response()->json(['message' => 'Course saved']);

                }

                /**
                 * Display the specified resource.
                 *
                 * @param  int  $id
                 * @return \Illuminate\Http\Response
                 */
                public function show($id)
                {
                    $course = Course::find($id);
                    return response()->json(['course' => $course]);
                }

                /**
                 * Update the specified resource in storage.
                 *
                 * @param  \Illuminate\Http\Request  $request
                 * @param  int  $id
                 * @return \Illuminate\Http\Response
                 */
                public function update(CourseForm $request, $id)
                {
                    if($request->ajax())
                    {
                        $course = Course::find($id);
                        $course->author = $request->input('author');
                        $course->name = $request->input('name');
                        $course->description = $request->input('description');
                        $course->price = $request->input('price');
                        $course->save();
                        return response()->json(['message' => 'Course updated']);
                    }
                }

                /**
                 * Remove the specified resource from storage.
                 *
                 * @param  int  $id
                 * @return \Illuminate\Http\Response
                 */
                public function destroy($id)
                {
                    $course = Course::find($id);
                    $course->delete();
                    return response()->json(['message' => 'Course removed']);
                }
            }

和我的路线文件:

            <?php

            Route::group(['prefix' => 'api', 'middleware' => ['cors']], function(){
                Route::resource('courses', 'CourseController', ['except' => [
                    'create', 'edit'
                ]]);
            });

            Route::group(['prefix' => 'api', 'middleware' => ['cors']], function(){

                Route::resource('test', 'HomepageController@index');
                Route::resource('projects', 'ProjectController@index');
            });



            Route::controllers([
                'auth'     => 'Auth\AuthController',
                'password' => 'Auth\PasswordController',
            ]);


            Route::group(['before' => 'auth', 'middleware' => ['auth']], function() {

            Route::get('/admin/','DashboardController@overview');



            });


                //Route::get('/test', 'HomepageController@index');

女士们先生们,真面目掌上时尚我已经弄清楚到底是怎么回事……是网址末尾的斜杠把这一切搞砸了。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM