不支持的媒体类型应用程序/ x-www-form-urlencoded

时间:2018-01-28 08:50:56

标签: ajax react-native redux elixir elixir-framework

我突然得到了这个错误:

21:28:14.345 [debug] ** (Plug.Parsers.UnsupportedMediaTypeError) unsupported media type application/x-www-fo
rm-urlencoded
    (plug) lib/plug/parsers.ex:231: Plug.Parsers.ensure_accepted_mimes/4
    (api) lib/api/router.ex:1: Api.Router.plug_builder_call/2
    (api) lib/plug/debugger.ex:123: Api.Router.call/2
    (plug) lib/plug/adapters/cowboy/handler.ex:15: Plug.Adapters.Cowboy.Handler.upgrade/4
    (cowboy) /Users/Ben/Development/Projects/vepo/api/deps/cowboy/src/cowboy_protocol.erl:442: :cowboy_protocol.execute/4

发出此网络请求时:

Request URL:http://192.168.20.6:4000/products/?p_id=1&s_id=1
Request Method:PUT
Status Code:415 Unsupported Media Type
Remote Address:192.168.20.6:4000
Referrer Policy:no-referrer-when-downgrade
Response Headers
view source
cache-control:max-age=0, private, must-revalidate
content-length:45284
content-type:text/html; charset=utf-8
date:Sun, 28 Jan 2018 08:40:36 GMT
server:Cowboy
Request Headers
view source
Accept:*/*
Accept-Encoding:gzip, deflate
Accept-Language:en-GB,en-US;q=0.9,en;q=0.8
Connection:keep-alive
Content-:application/json
Content-Length:75
Content-Type:application/x-www-form-urlencoded; charset=UTF-8
Host:192.168.20.6:4000
Origin:http://evil.com/
Referer:http://localhost:8081/debugger-ui/debuggerWorker.js
User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36
X-Requested-With:XMLHttpRequest
Query String Parameters
view source
view URL encoded
p_id:1
s_id:1
Form Data
view source
view URL encoded
s_id:1
p_id:1
image:null
price:2.53
description:kcucufufi icif Gigiuyub

发送请求的代码:

import { ajax } from 'rxjs/observable/dom/ajax'

return ajax({
    body: action.payload,
    method: 'PUT',
    headers: { 'Content-': 'application/json' },
    url: `http://192.168.20.6:4000/products/?p_id=${
        action.payload.p_id
        }&s_id=${action.payload.s_id}`
}).map(response => updateEditProductInDbFulfilled(response))
    .catch(error => Observable.of(updateEditProductInDbRejected(error)))

我没有主动改变后端的任何内容而不接受x-www-form-urlencoded,所以为什么会在以前工作时发生这种情况?

x-www-form-urlencoded不好吗?成功发送网络请求的最佳方法是什么?更改发送请求的代码或以某种方式更改后端以接受请求?

后端是Elixir。

这是我添加Plug.Parsers(在我的路由器中)的方式:

  if Mix.env == :dev do
    use Plug.Debugger
  end
  plug :match
  plug Plug.Parsers, parsers: [:json],
                   pass:  ["application/json"],
                   json_decoder: Poison
  plug :dispatch

0 个答案:

没有答案