在WebAPI中,无论如何都要记录使用动作过滤器调用或执行的控制器的动作方法的名称.我正在使用RouteData属性,如下所示,但操作值不包含任何值.有什么办法可以在过滤器中获取操作名称.
public class LogActionFilter : ActionFilterAttribute
{
public override void OnActionExecuted(HttpActionExecutedContext actionExecutedContext)
{
Log(actionExecutedContext.ActionContext.RequestContext.RouteData);
base.OnActionExecuted(actionExecutedContext);
}
private void Log(System.Web.Http.Routing.IHttpRouteData httpRouteData)
{
var controllerName = httpRouteData.Values["controller"];
var actionName = httpRouteData.Values["action"];
var message = String.Format("controller:{0}, action:{1}", controllerName, actionName);
Debug.WriteLine(message, "Action Filter Log");
}
}
Run Code Online (Sandbox Code Playgroud) 我正在使用HttpClient使用下面的代码将文件上传到WebAPI资源.由于我使用的是MultipartFormDataContent,因此请求消息内容类型设置为multipart/form-data.在WebAPI中,我检查内容标题只允许文本/普通媒体类型.那么,如果我使用带有MultipartFormDataContent的HttpClient,我在哪里设置文件类型的内容头.
try
{
var content = new MultipartFormDataContent();
string filePath = Server.MapPath("~/Content/" + "demo.txt");
var filestream = new FileStream(filePath, FileMode.Open);
var fileName = System.IO.Path.GetFileName(filePath);
content.Add(new StreamContent(filestream), "file", fileName);
var requestMessage = new HttpRequestMessage()
{
Method = HttpMethod.Post,
Content = content,
RequestUri = new Uri("http://localhost:64289/api/uploads/"),
};
var client = new HttpClient();
client.DefaultRequestHeaders.Add("Accept", "application/json");
HttpResponseMessage response = await client.SendAsync(requestMessage);
if (response.IsSuccessStatusCode)
{
///
}
}
catch (Exception e)
{
throw;
}
Run Code Online (Sandbox Code Playgroud)