其他分享
首页 > 其他分享> > 调用Web服务函数时为什么出现错误?

调用Web服务函数时为什么出现错误?

作者:互联网

我正在编写C#Web API 2 Web服务,希望获得一些帮助,以将单个项目从请求发送到Web服务.

这是Web服务控制器的类代码:

[RoutePrefix("api")]
public class ItemsWebApiController : ApiController

这是Web服务功能:

// GET: api/Getitem/1
[Route("Getitem")]
[System.Web.Http.HttpGet]
[ResponseType(typeof(Item))]
public async Task<IHttpActionResult> GetItem(int id)
{
    Item item = await db.items.FindAsync(id);
    if (item == null)
    {
        return NotFound();
    }

    return Ok(item);
}

这是IIS网站的uri:

http://localhost/thephase

这是我正在访问的uri:

http://localhost/thephase/api/Getitem/1

这是浏览器中显示的错误:

{“Message”:”No HTTP resource was found that matches the request URI
‘07002’.”,”MessageDetail”:”No type
was found that matches the controller named ‘GetItem’.”}

这是WebApiConfig代码:

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 }
        );
        var appXmlType = config.Formatters.XmlFormatter.SupportedMediaTypes.FirstOrDefault(t => t.MediaType == "application/xml");
        config.Formatters.XmlFormatter.SupportedMediaTypes.Remove(appXmlType);
    }
}

该错误指出控制器名为“ GetItem”,这是不正确的.因此,我认为问题出在WebApiConfig路由代码中.

如果我从函数中删除了int id,则该函数将被正确调用.

这是没有参数的相同函数:

// GET: api/Getitemnoparameter
[Route("Getitemnoparameter")]
[System.Web.Http.HttpGet]
[ResponseType(typeof(Item))]
public async Task<IHttpActionResult> GetItem()
{
    Item item = await db.items.FindAsync(1);
    if (item == null)
    {
        return NotFound();
    }

    return Ok(item);
}

以下uri可以正确访问该函数:

http://localhost/thephase/api/Getitemnoparameter

因此,问题与int参数有关.

有人可以帮我带参数访问GetItem函数吗?

解决方法:

因为您正在使用属性路由,所以还需要指定参数才能使其起作用.

查看本教程,以更好地理解.

Route Prefixes

[Route("Getitem/{id:int}")]

标签:asp-net-web-api2,c
来源: https://codeday.me/bug/20191027/1944380.html