4

尝试使用 VS2010 访问 MVC4 Web-API 应用程序中的控制器操作时,出现网页不可用错误。我正在尝试上传一个小型(小于 1MB)的 pdf 文档,创建一个 byte[] 以传递给另一个服务。但是,我无法进入我的普通控制器或我的 api 控制器。我的应用程序有效,所有视图/部分/等。除了这个(带有文件上传表单的页面)之外,都显示得很好。这个视图是一个强类型的局部视图。

我尝试使用此处显示的方法:上传文件 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,运行时调整,路由和 apiroutes,但完全不知所措。请帮忙!

我的用户界面:

带有网址的表格 我的错误: 错误

我的表格:

    <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 }
        );
    }

我的 WebConfig 的一部分:

    <httpHandlers>
       <add path="*.less" verb="GET" type="dotless.Core.LessCssHttpHandler, dotless.Core" />
    </httpHandlers>
    <httpRuntime executionTimeout="99009" maxRequestLength="2097151"/>
4

3 回答 3

0

我想……在

@使用(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...)

//在这里你写你的URL想要去哪里而不是“文档”

// 如果你想要 web api 配置 ===> 写“Home/api/Documents”

// 如果你想在 Route Config ===> 为第一个“文档”为第二个“家庭/文档”

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

在您的错误页面中,将 URL 视为 /Index/AddDocument....这是错误的方式....所以检查 URL 是否正确,并给出正确的控制器名称和在路由文件中定义的操作....

于 2013-09-18T12:58:59.993 回答
0

由于安装了 Fiddler,我有时会遇到同样的错误。当它被配置为作为代理启动时,它会更改您的 LAN 配置,因此它可以作为代理工作,有时系统在没有 Fiddler 的情况下将无法工作。希望这可以帮助。

于 2013-02-06T15:14:36.197 回答
0

对我来说,问题出在 nginx 上:

http {
    client_max_body_size 0;
}

我将 client_max_body_size 设置为 0。默认值为 1M。

来源:https ://serverfault.com/a/401732

于 2015-02-12T17:38:45.220 回答