VS2010 を使用して MVC4 Web-API アプリでコントローラー アクションにアクセスしようとすると、Web ページを使用できないというエラーが発生します。小さなサイズ (1 MB 未満) の pdf ドキュメントをアップロードしようとしています。バイト [] を作成して、別のサービスに渡します。ただし、通常のコントローラーにも API コントローラーにもアクセスできません。私のアプリは動作し、すべてのビュー/パーシャル/など。これ(ファイルアップロードフォームのあるページ)を除いて、問題なく表示されます。このビューは、厳密に型指定されたパーシャルです。
ここに示されている方法を使用してみました: Upload a file MVC 4 Web API .NET 4およびここ: http://blogs.msdn.com/b/henrikn/archive/2012/03/01/file-upload -and-asp-net-web-api.aspxと、アクション属性がアクションを見つけられないため、両方とも機能しません。api/Documents を配置しても Home/api/Documents を配置しても機能しません。だから私はあきらめて、html ヘルパーの beginform に戻りました。そのため、派手な Web API をあきらめた後 (非同期を機能させることができませんでした)、古い学校に行ってフォームを介してファイルを渡すだけだと考えましたが、同じエラーが発生します。また、ページの再作成、httphandlers、ランタイムの調整、ルートと apiroute の調整を試みましたが、完全に途方に暮れています。助けてください!
私のUI:
私のエラー:
私のフォーム:
<div class="tab-pane" id="addDoc">
@using (Html.BeginForm("AddDocument", "Documents", FormMethod.Post, new { @class = "form-horizontal", @enctype = "multipart/form-data" }))
{
<label class="control-label" for="newFile">Upload : </label>
<input name="newFile" type="file" />
<input type="submit" value="Submit" class="btn btn-success"/>
}
</div>
私のAPIコントローラ:これは意味がないことはわかっていますが、ここに到達するかどうかを確認するためのブレークポイントがありますが、そうではありません...
[HttpPost]
public AddDocumentResponse AddDocument(HttpPostedFileBase newFile)
{
AddDocumentResponse response = new AddDocumentResponse();
return response;
}
私の通常のコントローラーアクション:
[HttpPost]
public ActionResult AddDocument(HttpPostedFileBase newFile)
{
return View("DevNotes");
}
私の WebApiConfig:
public static void Register(HttpConfiguration config)
{
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "Home/api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
私のルート構成:
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
routes.MapRoute(
name: "Default2",
url: "Home/{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
My WebConfig の一部:
<httpHandlers>
<add path="*.less" verb="GET" type="dotless.Core.LessCssHttpHandler, dotless.Core" />
</httpHandlers>
<httpRuntime executionTimeout="99009" maxRequestLength="2097151"/>