如何调用odoo原生web api
场景:这几天用C#封装了一下odoo的api,一开始是正常的,但是后来突然间就404错误了,查找了一下原因,原来是只有一个数据库的时候,直接请求api是没问题的,但是多个数据库的情况下就会报404错误,这是因为请求的时候odoo不知道你调用的是哪个数据库,所以就返回报错了。
解决方法如下:
调用登录接口,返回对应的cookie:
private List<RestResponseCookie> Login()
{
var client = new RestClient("http://8.142.93.198:8069/web/session/authenticate")
{
Timeout = -1
};
var request = new RestRequest(Method.POST);
request.AddHeader("Content-Type", "application/json");
request.AddHeader("Cookie", "session_id=cfa886f9eaa188cfa58a5a1862b9979416688a29");
var body = @"{
" + "\n" +
@" ""params"": {
" + "\n" +
@" ""login"": ""admin"",
" + "\n" +
@" ""password"": ""admin"",
" + "\n" +
@" ""db"": ""odoo15""
" + "\n" +
@" }
" + "\n" +
@"}";
request.AddParameter("application/json", body, ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
return response.Cookies.ToList();
}
然后在请求接口的时候,加上登录获取的cookie,代码如下:
private string RestQuest(string method,string param)
{
RestClient client = new RestClient(BaseUrl + method + "?" + param)
{
Timeout = -1
};
var request = new RestRequest(Method.GET);
IList<RestResponseCookie> cks = Login();
if (cks.Count > 0)
{
if (cks.Where(t => t.Name == "session_id").Count() > 0)
{
request.AddCookie(cks.FirstOrDefault().Name, cks.FirstOrDefault().Value);
}
}
request.AlwaysMultipartFormData = true;
IRestResponse response = client.Execute(request);
return response.Content;
}
这样就完成了一次完整的请求了。