私はASP.NET Web APIを使用しています。私はパラメータがない場合、正常に動作する私のコントローラにアクションがあります。以下のようなパラメータが存在する場合:'MediaTypeFormatter'は、 'String'型のオブジェクトを読み取ることができません。
public string UploadFile(string actionType)
その後、私のアクションが呼び出されていないと私はフィドラーで表示次のメッセージ、取得:
いいえ「MediaTypeFormatterは」のオブジェクトを読み取るために利用可能です次のように私の
global.asx
でメディアタイプ「マルチパート/フォームデータ」
ルートとタイプ「string」は次のとおりです。
"api/{controller}/{action}/{actionType}"
私がアクションを呼び出すためにjQueryのポストを使用しています:
function upload() {
var actiontype = $("input:radio[name=actiontype]").val();
var formData = new FormData($('form')[0]);
$.ajax({
url: 'api/uploads/uploadfile/' + actiontype,
type: 'POST',
success: function (data) {
$("#mydiv").append(data);
},
error: function (data) {
$("#mydiv").append(data);
},
data: formData,
cache: false,
contentType: false,
processData: false
});
};
ここに私のアクションメソッドです:
public string UploadFile(string actionType)
{
if (Request.Content.IsMimeMultipartContent())
{
//Save file
MultipartFormDataStreamProvider provider = new MultipartFormDataStreamProvider(HttpContext.Current.Server.MapPath("~/Files"));
Request.Content.ReadAsMultipartAsync(provider);
}
return string.Format("Action {0} Complete!", actionType);
}
は、この回避策で、既知の問題ですか?パラメータを使用して単純なアクションを実行するにはどうすればよいですか?
ありがとうございました。実際に私はWebフォームを使用しています - グローバルテンプレートには、 "api/{controller}/{action}/{actionType}"と定義されたルートテンプレートがあります。パラメータがなければ正常に動作することを覚えておいてください。そうするためにはs/tがあると思われます。 – Rivka
Webforms..huh?あなたのコントローラは 'ApiController'から継承していますか? firebug/fiddler/whateverを使用しています...要求ヘッダの「Accept」に何が記載されていますか?あなたがjson backを賞賛していると仮定すると、それは 'application/json'でなければなりません。あなたのajax呼び出しの一部として 'dataType:json'が必要な場合があります。 – EBarr
私のコントローラは、apicontrollerから継承しません。フィドラーでは、コンテンツタイプは 'application/json'です。現在のAjaxコールを反映するようにOPを編集しました。 – Rivka