#angularjs #asp.net-mvc
#angularjs #asp.net-mvc
Вопрос:
У меня есть приложение, в котором пользовательский интерфейс построен с помощью Angular js и серверной части на Asp.net mvc. При нажатии кнопки я вызываю службу angular, которая передает объект json в asp.net Контроллер API вместо обычного контроллера mvc. Это связано с тем, что контроллер API должен сгенерировать файл Excel и вернуть HttpResponseMessage. Теперь, когда вызов переходит от службы angular к контроллеру API, данные не достигают и отображаются как неудачный запрос. В моей конфигурации маршрута у меня есть URL, определенный как «{controller} / {action} / {id}».Также вызовы обычных контроллеров выполняются нормально. Нужно ли добавлять URL-адрес для контроллера api, чтобы вызов службы достиг контроллера API. Также обычный контроллер mvc и контроллер API находятся в одной папке. Также для информации я запускаю приложение в https с различными настройками в IIS в локальной разработке. Ниже приведен код для службы angular и контроллера API mvc.
Service:
ServiceSlarDetails.prototype.GetSlarExcelFile = function () {
var link, params;
//link = baseUrl '/SLAR/GetSlarExcelFile';
link = baseUrl '/File/GetSlarExcelFile';
params = "'" JSON.stringify(this.object) "'";
return $http({
headers: { 'Content-Type': 'application/json', 'Accept': 'application/json' },
method: 'POST',
url: link,
responseType: "arraybuffer",
data: params
}).then(function onSuccess(response) {
return response.data;
}).catch(function onError(data, status, headers, config) {
return NewAlert.show('Oops!', 'Sorry, something went wrong. Please try again.', 'error');
});
};
API CONTROLLER:
public class FileController : ApiController
{
[HttpPost]
public HttpResponseMessage GetSlarExcelFile([FromBody] string ExcelTable)
{
HttpResponseMessage result = new HttpResponseMessage(HttpStatusCode.OK);
object obj = null;
HttpResponseMessage FailReturn = new HttpResponseMessage(HttpStatusCode.NoContent);
try
{
var data = (DataTable)JsonConvert.DeserializeObject(ExcelTable, (typeof(DataTable)));
data.TableName = "Slar";
if (data.Rows.Count > 0)
{
//string path = HttpContext.Current.Server.MapPath("~/ExcelFiles");
//if (!Directory.Exists(path))
//{
// Directory.CreateDirectory(path);
//}
using (XLWorkbook wb = new XLWorkbook())
{
wb.Worksheets.Add(data);
MemoryStream ms = new MemoryStream();
{
//wb.SaveAs(path "/" DateTime.Now.Ticks ".xlsx");
wb.SaveAs(ms);
result.Content = new ByteArrayContent(ms.GetBuffer());
result.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment");
result.Content.Headers.ContentDisposition.FileName = "Invoices.xlsx";
result.Content.Headers.ContentType = new MediaTypeHeaderValue("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
result.Content.Headers.ContentLength = ms.Length;
ms.Seek(0, SeekOrigin.Begin);
}
}
}
// obj = new { resp = data, error = "" };
}
catch (Exception ex)
{
//Logger.Error(ex.Message);
//obj = new { resp = "", error = ex.Message.ToString() };
}
return resu<
}
}
Комментарии:
1. Вы пытались вызвать это из postman? Какой URL-адрес вы вызываете? localhost/FileController/GetSlarExcelFile? Вы уверены, что делаете HTTP POST?
2. localhost/File/GetSlarExcelFile