4

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:

URL付きフォーム 私のエラー: エラー

私のフォーム:

    <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"/>
4

3 に答える 3

0

私は思う....で

@using ( Html.BeginForm(

                    "AddDocument", //Action

                    "Documents",  // Controller (only controller name not 
                                   accept in web api route you written constant 
                                  string as ( Home/api/ then controller name) 
                                  so write like that...)

//「Documents」ではなく、URL の移動先をここに記述します

// Web API 構成が必要な場合 ===> "Home/api/Documents" と記述

// Route Config で必要な場合 ===> 1 番目の「ドキュメント」を2 番目の「ホーム/ドキュメント」に

                    FormMethod.Post, 
                    new { @class = "form-horizontal",
                          @enctype = "multipart/form-data" }))
    {   }

エラーページでは、URL が /Index/AddDocument として表示されます....これは間違った方向に進んでいます....URL が正しく行われているかどうかを確認し、ROUTE FILES で定義されているようにコントローラーの適切な名前とアクションを指定してください....

于 2013-09-18T12:58:59.993 に答える
0

Fiddler がインストールされているために、同じエラーが発生することがあります。プロキシとして起動するように構成されている場合、LAN 構成が変更されるため、プロキシとして機能し、Fiddler がないとシステムが機能しない場合があります。お役に立てれば。

于 2013-02-06T15:14:36.197 に答える