MVC Web Api 404错误请求

时间:2015-07-29 07:35:14

标签: model-view-controller asp.net-web-api http-status-code-404 bad-request

我遇到有关MVC WebAPi的问题。这是我项目中的一些信息。

WebApiConfig;

 config.MapHttpAttributeRoutes();

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

TapuZeminApiController;

// 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的人;

TapuParselApiController;

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

它返回

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>

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

1 个答案:

答案 0 :(得分:0)

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的限制。