在ASP.NET webforms项目中,我试图添加一个web api2控制器,通过属性调用一个方法(.NET 4.5。)我必须让路由错误,因为它不起作用。
我在这个例子中工作:
这有效:
在WebApiConfig.cs中:
public static void Register(HttpConfiguration config)
{
// Web API configuration and services
// Web API routes
// this enables attribute routes
config.MapHttpAttributeRoutes();
// this uses convention-based routes ("Get" as a default)
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
在ClinicianController.cs中:
Clinician[] clinicians = new Clinician[]
{
new Clinician { Id = "1-552", Text = "EVERY MD,JOYCE" },
new Clinician { Id = "1-598", Text = "BODY MD,THOMAS" },
new Clinician { Id = "1-642", Text = "WANG MD,STANLEY R" },
new Clinician { Id = "1-893", Text = "CHUNG MD,JANAHN C" },
new Clinician { Id = "1-914", Text = "TO MD,J R" },
new Clinician { Id = "1-921", Text = "NIGHT MD,BARRY J" }
};
public IEnumerable<Clinician> GetAllClinicians()
{
return clinicians;
}
public IHttpActionResult Get(string id)
{
var clinician = clinicians.FirstOrDefault((p) => p.Id == id);
if (clinician == null)
{
return NotFound();
}
return Ok(clinician);
}
//NOPE
[Route("clinician/{name}/GetByName")]
//NOPE
[HttpGet]
public IHttpActionResult GetByName(string name)
{
var clinician = clinicians.FirstOrDefault((p) => p.Text == name);
if (clinician == null)
{
return NotFound();
}
return Ok(clinician);
}
和javascript:
$(document).ready(function () {
// Send an AJAX request
$.getJSON(uri)
.done(function (data) {
// On success, 'data' contains a list of products.
$.each(data, function (key, item) {
// Add a list item for the product.
$('<li>', { text: formatItem(item) }).appendTo($('#clinicians'));
});
});
});
function formatItem(item) {
return item.Id + ' : ' + item.Text;
}
function find() {
var id = $('#mgpId').val();
// NOPE var jqxhr = $.getJSON(uri + '/' + id + '/GetByName')
var jqxhr = $.getJSON(uri + '/' + id)
.done(function (data) {
$('#clinician').text(formatItem(data));
})
.fail(function (jqXHR, textStatus, err) {
$('#clinician').text('Error: ' + err);
});
}
当我打电话
$.getJSON(uri + '/' + id + '/GetByName')
id =&#34; night&#34;,它会返回此错误:
SyntaxError:意外的令牌&lt;在位置0的JSON中
并且代码隐藏永远不会进入GetByName方法。我做错了什么?
更新:在VS2015中调试时,如果我打电话 的getJSON(&#39; API /临床医生/ 1-921&#39;) 它命中ClinicianController中的Get方法并按预期返回临床医师对象。我无法使用GetByName方法,所以我确定我的路由错误。
答案 0 :(得分:0)
而不是
var transactions = [
{
date: "2017-11-17",
price: "28",
},
{
date: "2017-12-17",
price: "22",
},
{
date: "2017-12-17",
price: "20",
}
]
var sumedUpDates = [];
var prices = [];
function isDateSumedUp(date) {
return sumedUpDates.indexOf(date.substring(0, 7)) !== -1;
}
function sumUpDate(date) {
var sum = 0;
transactions.forEach(t => {
if(t.date.substring(0, 7) === date.substring(0, 7)) {
sum += parseInt(t.price);
}
});
sumedUpDates.push(date.substring(0, 7));
prices.push(sum);
}
transactions.forEach(t => {
if(!isDateSumedUp(t.date)) {
sumUpDate(t.date);
}
});
var obj = {};
sumedUpDates.forEach((d, i) => obj[d] = prices[i]);
console.log(obj);
试
[Route("clinician/{name}/GetByName")]
[HttpGet]
也许您需要在[HttpGet("GetByName/{name}")]
上添加name
作为RouteParameter.Optional
以及