2017年7月26日 星期三
2017年7月17日 星期一
$http.post 錯誤處理
c#
====
try{
...
} catch (Exception ex)
{
Response.StatusCode = (int)System.Net.HttpStatusCode.InternalServerError;
Response.Write(ex.詳細訊息());
return null;
}
public static string 詳細訊息(this Exception ex)
{
if (ex is System.Data.Entity.Validation.DbEntityValidationException)
return ((System.Data.Entity.Validation.DbEntityValidationException)ex).EntityValidationErrors.SelectMany(a => a.ValidationErrors.Select(b => b.ErrorMessage)).Join("\n");
else
return ex.InnerException?.InnerException?.Message ?? ex.InnerException?.Message ?? ex.Message;
}
javascript
====
$http.post('@Url.Action("匯出")')
.then(function (response) {
...
}, function (response) {
// response.data = ex.詳細訊息()
});
注意 : web.config 需加入以下設定,否則 response.data 會固定為 iis 針對Response.StatusCode預設的資料
<system.webServer>
<httpErrors existingResponse="PassThrough"></httpErrors>
asp.net webmethod 寫法
====
HttpContext.Current.Response.Write(ex.Message);
HttpContext.Current.Response.StatusCode = (int)System.Net.HttpStatusCode.InternalServerError;
HttpContext.Current.Response.Flush();
//忽視之後透過Response.Write輸出的內容
HttpContext.Current.Response.SuppressContent = true;
//忽略之後ASP.NET Pipeline的處理步驟,直接跳關到EndRequest
HttpContext.Current.ApplicationInstance.CompleteRequest();
====
try{
...
} catch (Exception ex)
{
Response.StatusCode = (int)System.Net.HttpStatusCode.InternalServerError;
Response.Write(ex.詳細訊息());
return null;
}
public static string 詳細訊息(this Exception ex)
{
if (ex is System.Data.Entity.Validation.DbEntityValidationException)
return ((System.Data.Entity.Validation.DbEntityValidationException)ex).EntityValidationErrors.SelectMany(a => a.ValidationErrors.Select(b => b.ErrorMessage)).Join("\n");
else
return ex.InnerException?.InnerException?.Message ?? ex.InnerException?.Message ?? ex.Message;
}
javascript
====
$http.post('@Url.Action("匯出")')
.then(function (response) {
...
}, function (response) {
// response.data = ex.詳細訊息()
});
注意 : web.config 需加入以下設定,否則 response.data 會固定為 iis 針對Response.StatusCode預設的資料
<system.webServer>
<httpErrors existingResponse="PassThrough"></httpErrors>
asp.net webmethod 寫法
====
HttpContext.Current.Response.Write(ex.Message);
HttpContext.Current.Response.StatusCode = (int)System.Net.HttpStatusCode.InternalServerError;
HttpContext.Current.Response.Flush();
//忽視之後透過Response.Write輸出的內容
HttpContext.Current.Response.SuppressContent = true;
//忽略之後ASP.NET Pipeline的處理步驟,直接跳關到EndRequest
HttpContext.Current.ApplicationInstance.CompleteRequest();
2017年7月14日 星期五
複製 Entity Framework 的 Entity
(TEntity)db.Entry(obj).GetDatabaseValues().ToObject();
此種方式只會複製值,不會複製物件或其參考,不過效能不佳,不適合用在大量複製
若 model 有關聯其他 model,導覽屬性會造成以下兩種作法都無法複製
使用序列化方式
使用無差別屬性對應方式
此種方式只會複製值,不會複製物件或其參考,不過效能不佳,不適合用在大量複製
若 model 有關聯其他 model,導覽屬性會造成以下兩種作法都無法複製
使用序列化方式
使用無差別屬性對應方式
訂閱:
文章 (Atom)
input 連結 datalist 用程式控制彈出選項
範例: nextTick(() => document.querySelector('input').showPicker()); ※僅支援現代瀏覽器
-
1. 設定檔案下載儲存位置為 C:\Users\%username%\AppData\Local\Google\Chrome\User Data\Default\Cache 2. 勾選"下載每個檔案前詢問儲存位置" 3. 針對不要下載的檔案類型於第一...
-
自動設定欄寬 sheet.Cells.AutoFitColumns(3, 20); // 必須設定 min 跟 max 才會正常作用 凍結欄位 sheet.View.FreezePanes(4, 4); 標題列 ws.PrinterSettings.RepeatRo...
-
使用 FreeSpire.XLS ... ep.Save(); using (var workbook = new Workbook()) using (var memStream = new MemoryStream()) { workbook.LoadFromSt...