C# 遵循WebAPI教程时找不到资源

C# 遵循WebAPI教程时找不到资源,c#,asp.net-mvc,asp.net-mvc-4,asp.net-web-api,C#,Asp.net Mvc,Asp.net Mvc 4,Asp.net Web Api,我有一个ASP.NETMVC项目。我需要添加WebAPI到它 我尝试像本教程中那样添加模型和控制器() 我添加了模型: public class Product { public int Id { get; set; } public string Name { get; set; } public string Category { get; set; } public decimal Price { get; set; } } 这是我的控制器 using

我有一个ASP.NETMVC项目。我需要添加WebAPI到它

我尝试像本教程中那样添加模型和控制器()

我添加了模型:

public class Product
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string Category { get; set; }
    public decimal Price { get; set; }
}
这是我的控制器

 using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web.Http;
using SmartSolutions.Models;

namespace SmartSolutions.Controllers
{
    public class ProductsController : ApiController
    {
        Product[] products = new Product[]
        {
            new Product { Id = 1, Name = "Tomato Soup", Category = "Groceries", Price = 1 },
            new Product { Id = 2, Name = "Yo-yo", Category = "Toys", Price = 3.75M },
            new Product { Id = 3, Name = "Hammer", Category = "Hardware", Price = 16.99M }
        };
        public IEnumerable<Product> GetAllProducts()
        {
            return products;
        }
        public IHttpActionResult GetProduct(int id)
        {
            var product = products.FirstOrDefault((p) => p.Id == id);
            if (product == null)
            {
                return NotFound();
            }
            return Ok(product);
        }
    }
}
当我启动应用程序时,我有这个


我的错误可能在哪里?

如果id是可选的,则必须在API控制器中的方法中将int作为null传递,URL应为API/products/GetProduct。此外,访问链接您可能正在执行已询问问题中提到的任何错误 它的答案是将您的特定规则置于常规规则之前(如默认),这意味着使用RouteTable.Routes.MapHttpRoute首先映射“WithActionApi”,然后映射“DefaultApi”


WebApiConfig
中的代码被调用了吗?你说的是Global.asax.cs吗?@PatrickHofman
 public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
        config.MapHttpAttributeRoutes();

        config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );
    }
 public IHttpActionResult GetProduct(int? id)
        {
            var product = products.FirstOrDefault((p) => p.Id == id);
            if (product == null)
            {
                return NotFound();
            }
            return Ok(product);
        }