asp.net web api自定义方法动作类型GET by id返回404

时间:2018-01-11 09:38:55

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

我想用web api创建新项目。但是当我用id调用api类型GET时我遇到了一些问题。结果是第404页,但我在同一个过程中写入请求类型'POST',在'[HttpPost]'和& '[HTTPGET]'

这是我在控制器名称JobsController中的代码

using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web.Http;
using System.Web.Http.Cors;

namespace TechReqApi.Controllers
{

    public class JobsController : ApiController
    {
        [HttpGet]
        public string getJobsByRequest()
        {
            return "dasdasda";
        }

        [EnableCors(origins: "*", headers: "*", methods: "*")]
        [HttpGet]
        public List<mdJobReq> getJobsByRequestStatusId(int RequestStatusId)
        {
            List<mdJobReq> List_mdJobReq = new List<mdJobReq>();


            return List_mdJobReq;
        }


    }
}

这是我的WebApiConfig

public static void Register(HttpConfiguration config)
        {
            // Web API configuration and services
            config.EnableCors();
            // Web API routes
            config.MapHttpAttributeRoutes();

            config.Routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "api/{controller}/{id}",
                defaults: new { id = RouteParameter.Optional }
            );

            config.Formatters.JsonFormatter.SerializerSettings.Formatting = Newtonsoft.Json.Formatting.Indented;
            config.Formatters.JsonFormatter.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();
        }

在我的情况下,我想要像格式一样调用服务 - &gt; api / controller / action / {id},我已经尝试但仍然没有工作

1 个答案:

答案 0 :(得分:0)

Probobly你的路线中没有RequestStatusId,

尝试致电:

http://localhost:52741/api/jobs?RequestStatusId=6

http://localhost:52741/api/jobs/getJobsByRequestStatusId?RequestStatusId=6

或尝试将操作更改为

[HttpGet]
public List<mdJobReq> getJobsByRequestStatusId(int Id)

<强> EDIT1

要为路由添加操作,请更改routeConfig:

config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{action}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );

然后要调用此请求,您必须使用url:

http://localhost:52741/api/jobs/getJobsByRequestStatusId?RequestStatusId=6

编辑2

为了像这样打网址:

http://localhost:52741/api/jobs/getJobsByRequestStatusId/6

也改变行动

[HttpGet]
public List<mdJobReq> getJobsByRequestStatusId(int Id)

有关路线的更多信息: ROUTING