MVC Web Api 404 错误请求

MVC Web Api 404 Bad Request

我对 MVC WebAPI 有疑问。这是我项目中的一些信息。

WebApi配置;

 config.MapHttpAttributeRoutes();

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

塔普泽民Api控制器;

// GET api/<controller>
    [Route("api/TapuZeminApi/GetZemins")]
    [HttpPost]
    public string GetZeminsFromZeminArg(object arg)
    {
        ZeminArg zemArg = SConvert.DeserializeJSON<ZeminArg>(arg.ToString());

        List<TapuZeminModel> zeminList = TapuModule.GetZeminListFromArgs(zemArg);


        string jsonResult = SConvert.SerializeJSON(zeminList);
        return jsonResult;
    }

    // GET api/<controller>/5
    public string GetZeminsFromTcNo(int id)
    {
        List<TapuZeminModel> zeminList = TapuModule.GetZeminListFromTcNo(id.ToString());

        string jsonResult = SConvert.SerializeJSON(zeminList);
        return jsonResult;
    }

我还有很多 Api 喜欢;

TapuParselApi控制器;

public List<string> GetAdaNo(int id)
    {
        List<string> adaList = TapuModule.GetAdaListFromMahalleTapuKod(id);

        adaList = adaList.OrderBy(x => x, new AlphanumComparator()).ToList();
        return adaList;
    }

   [Route("Api/TapuParselApi/GetParselNo/MahalleId/{id}/AdaNo/{adaNo}")]
    public object GetParselNo(int id, string adaNo)
    {
        List<TapuParselModel> parselList = TapuModule.GetParselListFromMahalleAndAdaTapuKod(id, adaNo);

        List<string> parselNoList = parselList.Select(x => x.ParselNo).ToList<string>();
        parselNoList = parselNoList.OrderBy(x => x, new AlphanumComparator()).ToList();

        var jsonResult = SConvert.SerializeJSON(parselNoList);
        return jsonResult;
    }

我可以使用所有 api,但其中一个无法使用。当我试图到达

http://localhost:55591/Api/TapuZeminApi/GetZeminsFromTcNo/41206410132

它returns

This XML file does not appear to have any style information associated with it. The document tree is shown below.

请求无效。

<MessageDetail>
The parameters dictionary contains a null entry for parameter 'id' of non-nullable type 'System.Int32' for method 'System.String GetZeminsFromTcNo(Int32)' in 'Sehir.Catalog.Areas.Tapu.Controllers.TapuZeminApiController'. An optional parameter must be a reference type, a nullable type, or be declared as an optional parameter.
</MessageDetail>
</Error>

为什么会出现这个错误??我该怎么办?

http://localhost:55591/Api/TapuZeminApi/GetZeminsFromTcNo/41206410132

此 http 请求中的值 41206410132 对于 int 来说太大了。

您需要将控制器操作中的参数类型更改为 long

    // GET api/<controller>/5
    public string GetZeminsFromTcNo(long id)
    {
        List<TapuZeminModel> zeminList = TapuModule.GetZeminListFromTcNo(id.ToString());

        string jsonResult = SConvert.SerializeJSON(zeminList);
        return jsonResult;
    }

您可以阅读有关数字类型限制的更多信息here