Web API OData v7。我正在为CSV,Excel等编写自定义格式器。我不知道如何将自定义格式器(ODataMediaTypeFormatter)指向自定义类,以在其中修改输出。
CustomFormatter:ODataMediaTypeFormatter-具有MessageWriterSettings.MediaTypeResolver,在7版中不再存在
调试时,进入GetPerRequestFormatterInstance,然后它死于A。找不到与响应的内容类型匹配的受支持的MIME类型。
我无法弄清楚流程-如何将其绑定到我的自定义(ODataWriter)编写器(csv或我想创建的任何内容)。
例如,从git的示例中:
public class CustomFormatter : ODataMediaTypeFormatter
{
private readonly string csvMime = ;
public CustomFormatter(params ODataPayloadKind[] kinds)
: base(kinds) {
//----no longer exists in 7
//MessageWriterSettings.MediaTypeResolver = new MixResolver();
SupportedEncodings.Add(Encoding.UTF8);
SupportedEncodings.Add(new UTF8Encoding(encoderShouldEmitUTF8Identifier: false));
SupportedMediaTypes.Add(new MediaTypeHeaderValue("text/csv"));
}
}
public class MixResolver : ODataMediaTypeResolver
{
public override IEnumerable<ODataMediaTypeFormat> GetMediaTypeFormats(ODataPayloadKind payloadKind)
{
if (payloadKind == ODataPayloadKind.Resource || payloadKind == ODataPayloadKind.ResourceSet)
{
return CsvMediaTypeResolver.Instance.GetMediaTypeFormats(payloadKind);
}
return base.GetMediaTypeFormats(payloadKind);
}
}
public class …Run Code Online (Sandbox Code Playgroud) c# odata asp.net-web-api asp.net-web-api-odata asp.net-web-api2
也许我忽略了一些明显的东西,但我在代码中看到过你可能有像"HairColor"这样的属性,然后是像"HairColor.Update()"这样的方法.这可能吗?
Person person = new Person(int personID);
person.HairColor = "Blonde";
person.HairColor.Update();
Run Code Online (Sandbox Code Playgroud)
我有特定的属性,我希望能够逐个扩展.我想我可以有一个名为"HairColorUpdate"的方法,但似乎应该可以使用HairColor.Update().我不想使用"set",因为我并不总是希望以这种方式更新DB.
我这样做的原因是因为我可能只想调用数据库来更新一列而不是调用我的save方法,该方法更新每一列有望提高效率.
我创建了一个 HttpHandler 来检查特定目录中的用户授权。它正在运行并经过测试,但是,在运行 ProcessRequest 方法后,它似乎不会继续处理页面。这是它的基础知识:
public AdminProtectionHandler() { }
bool IHttpHandler.IsReusable { get { return true; } }
void IHttpHandler.ProcessRequest(HttpContext context) {
if (!Sessions.CurrentUser.Authenticated)
{
context.Response.Write("ACCESS DENIED");
context.Response.End();
}
}
Run Code Online (Sandbox Code Playgroud)
在子文件夹的 web.Config 中:
<httpHandlers>
<add verb="*" path="*" validate="true" type="AdminProtectionHandler" />
</httpHandlers>
Run Code Online (Sandbox Code Playgroud)
未通过身份验证时,我会按预期得到响应:ACCESS DENIED
通过身份验证后,我得到一个空白页,就好像请求刚刚停止一样。
我确信我还没有足够的咖啡看清楚,这看起来微不足道,但是,我有一个for循环,它传递了jQuery插件中的一些函数.var i被传递,当然,传递i的最后一个值,而不是传递时分配的值.
for (var i = 1; i < 3 + 1; i++) {
$('#div' + i).plugin({ // i returns correctly here
onDelete: function () {
alert("Deleting #" + i); // i returns 4 every time - last value of i
}
});
}
Run Code Online (Sandbox Code Playgroud)
我如何"复制"我,所以它按照我的期望返回?我有一个解决方法,但我很想知道,所以我可以把头放在沙子里.