这篇文档主要讲解了在WebApi中如何处理不同类型的参数,包括基础类型、实体以及数组参数的传递,并且提到了WebApi的路由机制和异常处理方案。以下是对这些知识点的详细阐述:
**WebApi参数传递**
1. **基础类型参数**:
在WebApi中,对于基础类型参数,推荐使用`dynamic`来传递,避免使用`[FromBody]`注解和JSON格式的键值对。这使得基础类型参数的传递更为简洁。
2. **实体作为参数**:
当需要传递一个实体作为参数时,可以直接在Ajax请求中将对象作为数据传递。例如,可以创建一个JavaScript对象,然后通过`$.ajax`的`data`属性将该对象传递给服务器端的WebApi方法。
```javascript
$.ajax({
type: "post",
url: "http://localhost:27221/api/Charging/SaveData",
data: { entity: yourEntityObject },
// ...
});
```
在服务器端的WebApi控制器中,对应的方法会自动将传递的实体对象绑定到方法参数。
**WebApi路由机制**
1. **MVC与WebApi路由比较**:
MVC路由主要关注控制器和动作的映射,而WebApi路由更注重HTTP动词和资源路径的匹配。
2. **默认路由**:
WebApi的默认路由模式是`api/{controller}/{id}`,其中`{controller}`代表控制器名称,`{id}`通常是可选的,用于表示资源的ID。
3. **自定义路由**:
可以通过`Route`特性来自定义路由模板,以适应不同的URL结构需求。
4. **特性路由**:
特性路由允许在控制器或方法级别直接定义路由规则,提高路由的灵活性,如`[Route("api/[controller]/[action]")]`。
**WebApi异常处理**
1. **异常筛选器**:
异常筛选器可以用于全局、控制器或接口级别,捕获并处理运行时的异常。
2. **HttpResponseException**:
自定义`HttpResponseException`可以返回带有自定义错误信息的响应。
3. **HttpError**:
返回`HttpError`可以提供详细的错误信息,帮助客户端理解错误原因。
**WebApi返回值类型**
1. `void`无返回值:表示方法不返回任何内容。
2. `IHttpActionResult`:这是一个接口,提供了多种返回结果的实现,如`Json<T>`、`Ok<T>`、`NotFound`等。
3. `HttpResponseMessage`:允许直接操作响应消息,提供更高的灵活性。
**WebApi接口参数**
1. **GET请求参数**:
- 基础类型参数:可以直接在URL中作为查询字符串传递。
- 实体作为参数:通过URL路径或者查询字符串传递。
- 数组作为参数:可以拆分为多个参数或以JSON格式放在查询字符串中。
- "怪异"的GET请求:WebApi方法名称可以以`get`开头,但不强制。
2. **POST请求参数**:
- 错误的写法:直接将对象作为数据传递,但没有指定`[FromBody]`。
- 正确的用法:使用`[FromBody]`注解,并以JSON格式传递对象。
通过以上知识点,我们可以更好地理解和使用WebApi来构建RESTful服务,高效地处理各种类型的参数,以及优雅地处理异常和返回响应。