发布后,Web api应用程序得到了Http错误404.0?

时间:2015-07-06 22:08:53

标签: asp.net asp.net-mvc iis asp.net-web-api

我创建了一个简单的Asp.net web api应用程序。它在Visual Studio中运行时有效。在Visual Studio 2013中进行调试时,网址为http://localhost:63082/api/products/1507

我在服务器上创建了一个IIS网站(mySite,端口为8081),并使用文件共享进行发布。但是,在服务器上尝试以下URL时,我总是遇到404错误。

http://localhost:8081/api/products/1507 (它显示错误页面中的物理路径是c:\ inetpub \ wwwroot \ mySite \ api \ products \ 1507。)

http://localhost:8081/mySite/api/products/1507 (它显示物理路径为c:\ inetpub \ wwwroot \ mySite \ mySite \ api \ products \ 1507)。

为什么网址不起作用?

控制器方法。

    [Route("api/Products/{fileId}")]
    public IEnumerable<Product> GetProductsByFileId(int fileId)
    {
        using (var db = new ProductContext())
        {
            var query = from b in db.Products where b.fileId == fileId select b;
            if (query == null)
            {
                return null;
            }
            return query.ToList();
        }
    }

以下显示了所有已发布的文件。似乎应用程序没有二进制文件?这是Visual Studio发布的问题吗?

    Directory: \\......\c$\inetpub\wwwroot\mySite


Mode                LastWriteTime     Length Name
----                -------------     ------ ----
d----          7/6/2015   6:21 PM            bin
-a---          7/6/2015  11:23 AM        101 Global.asax
-a---          7/6/2015   4:50 PM        574 packages.config
-a---          7/6/2015   5:41 PM       4611 Web.config


    Directory: \\......\c$\inetpub\wwwroot\mySite\bin


Mode                LastWriteTime     Length Name
----                -------------     ------ ----
-a---          7/6/2015   3:11 PM    5185232 EntityFramework.dll
-a---          7/6/2015   3:11 PM     599760 EntityFramework.SqlServer.dll
-a---          7/6/2015  11:21 AM     502272 Newtonsoft.Json.dll
-a---          7/6/2015  11:21 AM     185032 System.Net.Http.Formatting.dll
-a---          7/6/2015  11:21 AM     471240 System.Web.Http.dll
-a---          7/6/2015  11:21 AM      82120 System.Web.Http.WebHost.dll
-a---          7/6/2015   5:41 PM     109056 webapi.dll

1 个答案:

答案 0 :(得分:0)

试试这个:

[Route("api/Products/{fileId}")]
public IHttpActionResult Get(int fileId)
{
    Ok(GetProductsByFileId(fileId));
}

private IEnumerable<Product>  GetProductsByFileId(int fileId)
{
    using (var db = new ProductContext())
    {
        var query = from b in db.Products where b.fileId == fileId select b;
        if (query == null)
        {
            return null;
        }
        return query.ToList();
    }
}