我的基本Sitecore WebAPI路线工作得很好。但是,当我需要将一个整数数组传递给自定义Sitecore WebApi路由时,我得到404.如何做到这一点?以下是我尝试过的,并且在典型的WebApi路线中完美运行(没有sitecore)。
路线
AddWebApiRoute(
name: "StudentsCourseList",
routeTemplate: "api/v1/students/courselist",
defaults: new { controller = "StudentsApi", action = "GetCourses" });
Api控制器
public class StudentsApi: ApiController
{
public async Task<IHttpActionResult> GetCourses([ModelBinder(typeof(CommaDelimitedArrayModelBinder))]long[] courseids)
{
var result = await _client.GetCourses(courseids);
if (result == null)
{
return NotFound();
}
return Ok(result);
}
}
自定义模型活页夹
public bool BindModel(HttpActionContext actionContext, ModelBindingContext bindingContext)
{
var key = bindingContext.ModelName;
var val = bindingContext.ValueProvider.GetValue(key);
if (val != null)
{
var s = val.AttemptedValue;
if (s != null)
{
var elementType = bindingContext.ModelType.GetElementType();
var converter = TypeDescriptor.GetConverter(elementType);
var values = Array.ConvertAll(s.Split(new[] { ","},StringSplitOptions.RemoveEmptyEntries),
x => { return converter.ConvertFromString(x != null ? x.Trim() : x); });
var typedValues = Array.CreateInstance(elementType, values.Length);
values.CopyTo(typedValues, 0);
bindingContext.Model = typedValues;
}
else
{
// change this line to null if you prefer nulls to empty arrays
bindingContext.Model = Array.CreateInstance(bindingContext.ModelType.GetElementType(), 0);
}
return true;
}
return false;
}
然后尝试如下调用,返回404
/api/v1/students/courselist?courseids=1,2,3
作为Sitecore路线设置的一部分,是否需要完成任何缺失部分?
答案 0 :(得分:0)
要让Sitecore和WebApi协调工作,您需要在httpRequestBegin管道中添加处理器以使路由正常工作。您可以在线查找信息甚至源代码,例如: http://patrickdelancy.com/2013/08/sitecore-webapi-living-harmony