webAPI方法调用,路由的配置简单小例:
1、前台AJAX调用: $.ajax({
type: "GET",
url: "/openapi/v3/Question/GetTable",
dataType: 'json',
data: {
},
success: function (msg) {
var dd = JSON.stringify(msg);
$.ajax({
type: "POST",
url: "/openapi/v3/Question/ExportQuestion",
dataType: 'json',
data: {
"orgName": "abc",
"corseName": "efc",
"typeName": "单选题",
"exportType":1,
"jsons": dd
},
success: function (msg1) {
// 前台js中动态生成一个form,并通过它实现下载功能
var form = $('<form></form>');
form.attr('action', '/openapi/v3/Question/Export');
form.attr('method', 'Get');
form.css('display', 'none');
var input1 = $('<input type="hidden" name="filePath" value="' + msg1 + '" />');
form.append(input1);
form.appendTo('body');
form.submit();
}
});
}
});
get传输呢,参数长度有限制,当传输json等很长参数时,最好使用POST进行,post没有限制,后台接收post数据时,采用实体类形式;
2、路由配置:
namespace ItemBank.ESB.Areas.v3.Controllers
{
[RoutePrefix("openapi/v3/Question")]
public class v3QuestionController : ApiController
{
统一进行路由前缀,这样写在类外面使用RoutePrefix;当一个方法不想使用统一前缀时;那么就是用~波浪号进行修饰:
例如( [HttpGet, Route("~/openapi/v3/ItemBank/{ItemBankID}/QuestionTypes")])这样就可以重新定义路由规则。
3、后台接收ajax传入后台数据,使用HttpResponseMessage返回前台
[HttpPost]
[Route("ExportQuestion")]
public HttpResponseMessage ExportQuestion(ExportClass model)
{
HttpResponseMessage message = new HttpResponseMessage(HttpStatusCode.OK);
string result = service.ExportQuestion(model.orgName, model.corseName, model.typeName, model.exportType, model.jsons);
if (result == null)
message.StatusCode = HttpStatusCode.NotFound;
message.Content = new ObjectContent<string>(result, new JsonMediaTypeFormatter());
return message;
}
#endregion