返回
ExtJS 6.0 REST 代理 ID 问题如何解决?
javascript
2024-03-13 13:31:34
ExtJS 6.0 中 REST 代理无法获取正确的 ID
问题
在 ExtJS 6.0 中使用 REST 代理时,遇到一个问题,无法在 HTTP URL 中获取用于删除记录的正确 ID。请求 URL 与预期不符,导致服务器端出现错误。
解决方法
1. 检查模型定义
确保模型中定义了用于唯一标识记录的字段。在提供的示例中,没有显式定义主键字段,这可能会导致问题。建议显式定义主键字段,例如:
Ext.define('Movie.model.MovieModel', {
extend: 'Movie.model.Base',
fields: [
{ name: 'Movie_id', type: 'int', primaryKey: true },
// 其他字段定义
]
});
2. 审查代理配置
检查代理配置以确保正确设置以下选项:
- url: 确保 url 属性指向正确的 API 端点,例如
https://localhost:44369/Movies/DeleteMovie
。 - reader: reader 配置应指定用于解析服务器响应的数据格式。本例中使用 JSON reader,因此确保其配置正确。
- writer: writer 配置应指定用于将数据发送到服务器的数据格式。本例中使用 JSON writer,因此确保其配置正确。
3. 检查控制器操作
在控制器中,检查用于删除记录的操作。确保它使用正确的参数接收 ID。在提供的示例中,操作应如下所示:
public IHttpActionResult DeleteMovie(int id)
{
// 操作逻辑
}
4. 检查 HTTP 请求
检查发送到服务器的 HTTP 请求以确保它包含正确的 ID。在提供的错误消息中,请求 URL 中的 ID 为 MovieModel-75
。这表明模型实例可能正在作为参数传递,而不是实际的 ID。尝试明确指定 ID,而不是模型实例,例如:
store.remove(store.findRecord('Movie_id', id, 0, false, false, false));
5. 启用 CORS
确保服务器端 API 已启用跨域资源共享 (CORS)。这对于允许不同域的应用程序相互通信非常重要。在 Web API 控制器中,添加以下属性以启用 CORS:
[EnableCors("*", "*", "*")]
其他建议
- 确保服务器端 API 正在正确处理 DELETE 请求。
- 检查浏览器控制台中是否有任何其他错误消息或警告。
- 尝试使用不同的浏览器或清除浏览器缓存。
结论
通过遵循这些步骤,我们成功地解决了在 ExtJS 6.0 中使用 REST 代理获取正确 ID 的问题。请记住,根据具体情况,可能需要调整这些步骤。
常见问题解答
-
为什么我需要显式定义主键字段?
- 显式定义主键字段可确保模型中记录的唯一标识。
-
如何检查控制器操作是否使用正确的参数接收 ID?
- 检查操作方法的参数列表,确保它包含一个用于接收 ID 的参数。
-
为什么 HTTP 请求中会出现模型实例而不是 ID?
- 这可能是由于传递了模型实例而不是实际的 ID。请尝试明确指定 ID。
-
CORS 是什么,为什么需要启用它?
- CORS 是一种机制,允许不同域的应用程序相互通信。在跨域请求中,需要启用它。
-
如果按照这些步骤后仍然遇到问题怎么办?
- 检查服务器端 API 是否正确配置,并尝试调试请求/响应流。